azure-cosmosdb – 与(documentdb)SQL API相比,在Cosmos DB中使用Graph API非常慢

给定使用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毫秒响应时间.

点赞