了解 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-charge
和 x-ms-total-request-charge
。
关于这个我有三个问题:
- 两者有什么区别?
- 我注意到
x-ms-request-charge
总是以 0
和 x-ms-total-request-charge
作为非零值出现。这是为什么?和
- 我应该使用哪个值来计算请求费用?我的猜测是使用
x-ms-total-request-charge
因为它是一个非零值。
在我们讨论的过程中,如果有人能告诉我 x-ms-server-time-ms
和 x-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,这样以这种方式实现的驱动程序仍然可以解决请求的总成本。
感谢您的提问,希望对您有所帮助。
我正在使用 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-charge
和 x-ms-total-request-charge
。
关于这个我有三个问题:
- 两者有什么区别?
- 我注意到
x-ms-request-charge
总是以0
和x-ms-total-request-charge
作为非零值出现。这是为什么?和 - 我应该使用哪个值来计算请求费用?我的猜测是使用
x-ms-total-request-charge
因为它是一个非零值。
在我们讨论的过程中,如果有人能告诉我 x-ms-server-time-ms
和 x-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,这样以这种方式实现的驱动程序仍然可以解决请求的总成本。
感谢您的提问,希望对您有所帮助。