了解 CosmosDB Gremlin "x-ms-request-charge" 和 "x-ms-total-request-charge" API

Understanding "x-ms-request-charge" and "x-ms-total-request-charge" in CosmosDB Gremlin API

我正在使用 gremlin (version 3.4.6) 包来查询我的 Cosmos DB 帐户,目标是 Gremlin(图表)API。代码相当简单:

const gremlin = require('gremlin');

const authenticator = new gremlin.driver.auth.PlainTextSaslAuthenticator(
`/dbs/<database-name>/colls/<container-name>`,
"<my-account-key>"
);
const client = new gremlin.driver.Client(
    "wss://<account-name>.gremlin.cosmosdb.azure.com:443/",
    {
        authenticator,
        traversalsource : "g",
        rejectUnauthorized : true,
        mimeType : "application/vnd.gremlin-v2.0+json"
    }
);

client.submit("g.V()")
.then((result) => {
    console.log(result);
})
.catch((error) => {
    console.log(error);
});

代码运行良好,我得到了结果。结果对象有一个 attributes 属性 看起来像这样:

{
    "x-ms-status-code": 200,
    "x-ms-request-charge": 0,
    "x-ms-total-request-charge": 123.85999999999989,
    "x-ms-server-time-ms": 0.0419,
    "x-ms-total-server-time-ms": 129.73709999999994,
    "x-ms-activity-id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

如果您注意到,有两件事与请求费用相关(基本上我的查询有多贵):x-ms-request-chargex-ms-total-request-charge

关于这个我有三个问题:

  1. 两者有什么区别?
  2. 我注意到 x-ms-request-charge 总是以 0x-ms-total-request-charge 作为非零值出现。这是为什么?和
  3. 我应该使用哪个值来计算请求费用?我的猜测是使用 x-ms-total-request-charge 因为它是一个非零值。

在我们讨论的过程中,如果有人能告诉我 x-ms-server-time-msx-ms-total-server-time-ms 之间的区别,我将不胜感激。

这些响应代码特定于我们的 Gremlin API 并在此处记录,Azure Cosmos DB Gremlin server response headers

对于单个请求,Gremlin 服务器可以发送包含多个部分响应消息的响应(松散地相当于一个页面,但 return 编辑为流而不是多个 request/responses 与完成的延续SQL API).

  • x-ms-request-charge 是解析单个部分响应所消耗的 RU。
  • x-ms-total-request-charge 是 运行 当前部分响应消耗的总 RU。因此,当发送最终消息时,这将表示整个请求消耗的总 RU。

根据 Gremlin 客户端驱动程序的实现,每个部分响应可能会暴露给调用者,或者驱动程序将在内部累积所有响应并 return 最终结果。考虑到后者,这促使我们添加 x-ms-total-request-charge,这样以这种方式实现的驱动程序仍然可以解决请求的总成本。

感谢您的提问,希望对您有所帮助。