我希望有人可以帮助我。我已经设置了一个简单的测试来测试基本图的查询性能。我已包含以下代码。基本上,我要做的是创建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)
但是,一旦添加了order子句,查询就会花很多时间。一分钟完成:
g.V().hasId('partition1').out('friendsWith').order().by('name', incr).valueMap('name', 'profilePicture').range(0,2)
有没有一种方法可以索引图形来加快这种查询速度?
我还有另一个问题,我已将吞吐量设置为5000 RU,但是当我运行非常快速的查询时,我得到以下信息:
Data Explorer Query Stats Result
这个值应该代表什么(RU?),为什么那么高呢?
当我尝试运行一个简单查询时:
g.V().hasId('partition1').out('friendsWith').hasId('partition20001')
即使这样简单的查询,我也会收到“请求率很高”的信息。更令人担忧的是,当我将吞吐量提高到5000 RU时,我确实得到了一个结果,但它的确很慢,大约需要5到6秒钟来完成,这应该是一个非常简单的查询。