Cosmos DB - Gremlin - производительность при выполнении запроса снижается - PullRequest
1 голос
/ 29 апреля 2019

Я надеюсь, что кто-то может мне помочь.Я настроил простой тест для проверки производительности запросов для базового графика.Я включил код ниже.По сути, я создаю 30000 вершин, а затем создаю 20000 ребер в одной из вершин.

public async Task<bool> runTests(Models.Person person)
    {
        try
        {
            var gremlinServer = new GremlinServer(_hostname, _port, enableSsl: true,
                                               username: "/dbs/" + _dataBaseId + "/colls/" + _collectionId,
                                               password: _authKey);

            using (var gremlinClient = new GremlinClient(gremlinServer, new GraphSON2Reader(), new GraphSON2Writer(), GremlinClient.GraphSON2MimeType))
            {
                await gremlinClient.SubmitAsync<dynamic>("g.E().drop()");
                await gremlinClient.SubmitAsync<dynamic>("g.V().drop()");

                var counter = 30000;
                while (counter != 0)
                {
                    await gremlinClient.SubmitAsync<dynamic>("g.addV('partition" + counter + "').property('id', 'partition" + counter + "').property('profilePicture', '" + person.ProfilePicture + "').property('name', 'Person " + counter + "').property('partitionKey', 'partition" + counter + "')");
                    counter--;
                }

                var counter = 20000;
                while (counter != 0)
                {
                    int num = counter + 1;
                    var personToLink = "partition" + num;
                    await gremlinClient.SubmitAsync<dynamic>("g.V('partition1').addE('friendsWith').to(g.V('partition" + num + "'))");
                    counter--;
                }

                var searchResults = await gremlinClient.SubmitAsync<dynamic>("g.V().hasId('partition1').out('friendsWith').order().by('name', incr).valueMap('name', 'profilePicture').range(0,2)");

                return true;
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

При выполнении следующие запросы быстро возвращаются:

 g.V().hasId('partition1').out('friendsWith').valueMap('name', 'profilePicture').range(0,2)

Однако,как только я добавляю предложение порядка, запрос занимает намного больше времени.Более минуты, чтобы завершить:

g.V().hasId('partition1').out('friendsWith').order().by('name', incr).valueMap('name', 'profilePicture').range(0,2)

Есть ли способ индексировать график, чтобы ускорить этот тип запроса?

У меня есть еще один вопрос, я установил пропускную способность на5000 RU, однако, когда я запускаю запрос, который выполняется очень быстро, я получаю следующее:

Результат запроса данных в проводнике данных

Что это значение должно представлять (RU?) если так, почему он такой высокий?

Также, когда я пытаюсь выполнить простой запрос:

g.V().hasId('partition1').out('friendsWith').hasId('partition20001') 

, я получаю «Частота запросов велика», хотя это так простозапрос.Еще большее беспокойство вызывает то, что когда я увеличиваю пропускную способность до 5000 RU, я получаю результат обратно, но он действительно медленный, занимает около 5-6 секунд, что должно быть действительно простым запросом.

...