给定使用GraphAPI设置的CosmosDB.具有~4k顶点和~10k边缘的图形,从GraphAPI和DocumentAPI到相同数据库的类似查询显示出显着不同的运行时间.我一直在使用以下节点应用程序测试API之间的差异:
var Gremlin = require('gremlin');
var config = require("./config");
var documentdb = require('documentdb');
const docClient = new documentdb.DocumentClient(....);
const graphClient = Gremlin.createClient(....);
const start = new Date();
graphClient.execute('g.V("12345")', {}, (err, results) => {
const end = new Date();
if (err) {
return console.error(err);
}
console.log(`GraphDB API Results in: ${(end.getTime() - start.getTime()) / 1000}`);
});
var querySpec = {
query: 'SELECT * FROM c ' +
'WHERE c.id = "12345"',
};
const docStart = new Date();
docClient.queryDocuments("dbs/graphdb/colls/sn", querySpec).toArray((err, results) => {
const docEnd = new Date();
if (err) {
console.error(JSON.stringify(err, null, 2));
return;
}
console.log(`DocumentDB API Results in: ${(docEnd.getTime() - docStart.getTime()) / 1000}`)
});
此代码的输出显示被查询的单个文档由GraphAPI在~1.8秒内返回,其中文档在〜0.3秒内从documentdb api返回.
DocumentDB API结果:
[
{
"label": "company",
"id": "12345",
"parent": [
{
"_value": "54321",
"id": "de7c87f7-83db-43c2-8ddd-c5487dd5682e"
}
],
"name": [
{
"_value": "Acme Co",
"id": "b4316415-d5c3-4dcc-ac5f-64b1d8c8bd62"
}
],
"_rid": "KPk3APUeEgFcAAAAAAAAAA==",
"_self": "dbs/KPk3AA==/colls/KPk3APUeEgE=/docs/KPk3APUeEgFcAAAAAAAAAA==/",
"_etag": "\"0000df07-0000-0000-0000-5a2b23bd0000\"",
"_attachments": "attachments/",
"_ts": 1512776637
}
]
GraphDB API结果:
[
{
"id": "12345",
"label": "company",
"type": "vertex",
"properties": {
"parent": [
{
"id": "de7c87f7-83db-43c2-8ddd-c5487dd5682e",
"value": "54321"
}
],
"name": [
{
"id": "b4316415-d5c3-4dcc-ac5f-64b1d8c8bd62",
"value": "Acme Co"
}
]
}
}
]
所有这些示例都是固定大小的集合,RU一直变为10,000.
我在这里做错了吗?我需要做出更好/更多/更少的指数吗?无论查询结构如何,像Cosmos这样的云规模数据库在不到一秒的时间内无法返回单个文档,这似乎很疯狂.
我有简单遍历的例子(gV().hasLabel(‘x’).out(‘y’).hasLabel(‘z’))当hasLabel(‘x’)计数为~40时需要5秒以上才能返回.如果hasLabel(‘x’)计数为~1000,则遍历需要15秒才能返回.这对我来说似乎很慢.
我四处寻找任何性能数字,但没有找到任何例子.在一天结束时,我只是对这项技术抱有太多期待?
最佳答案 感谢MS解决问题.他们推出了gremlin API端点存在一些问题.我的实例是从我的数据库实例调用另一个区域中的gremlin端点(如果我正确理解来自MS的消息),这导致了问题.
我获得了一个功能标志,可以在门户上设置强制在新基础架构上部署新数据库.
我现在看到所有查询和遍历的500毫秒响应时间.