CosmosDB Graph是否支持像文档API那样的单请求一致性级别?
好问题!这其实是很多跨API操作Cosmos DB的开发者都会遇到的场景,我来给你详细说明:
Cosmos DB图API的请求级一致性与会话令牌复用
一、单个请求指定一致性级别(完全支持)
不管是用Gremlin.NET还是官方的Cosmos Graph SDK,都支持在单个请求级别指定一致性级别,完全可以覆盖集合的默认一致性设置,和文档API的逻辑一致。
举个Gremlin.NET的代码示例:
// 初始化GremlinClient(省略连接配置) var gremlinClient = new GremlinClient(...); // 创建请求选项,设置会话一致性级别 var requestOptions = new RequestOptions { ConsistencyLevel = ConsistencyLevel.Session }; // 提交带一致性设置的Gremlin查询 var queryResult = await gremlinClient.SubmitAsync<dynamic>("g.V().hasLabel('user')", requestOptions);
如果用新版的Microsoft.Azure.Cosmos SDK里的Graph相关操作,也可以通过CosmosGraphRequestOptions来设置一致性级别,核心逻辑是相通的。
二、DocumentClient会话令牌复用在Gremlin查询(可行)
完全可以!Cosmos DB的会话令牌是跨API通用的,只要是同一个账户下的操作,不管是文档API还是图API,都能复用会话令牌来维持会话一致性。
具体操作步骤:
- 从DocumentClient获取会话令牌:执行文档API操作后,从响应对象的
SessionToken属性提取令牌:
var documentClient = new DocumentClient(new Uri(endpoint), authKey); var docResponse = await documentClient.ReadDocumentAsync( UriFactory.CreateDocumentUri("myDatabase", "myCollection", "myDocumentId") ); string sessionToken = docResponse.SessionToken;
- 在Gremlin查询中复用令牌:把拿到的会话令牌传入Gremlin请求的选项中,同时设置一致性级别为
Session:
var gremlinRequestOpts = new RequestOptions { SessionToken = sessionToken, ConsistencyLevel = ConsistencyLevel.Session }; var gremlinResult = await gremlinClient.SubmitAsync<dynamic>("g.V('myVertexId')", gremlinRequestOpts);
需要注意的是,会话令牌有有效期(默认约15分钟),且只能用于同一个会话上下文的操作,过期或跨会话的令牌会失效。
内容的提问来源于stack exchange,提问作者Cristian Diaconescu
相关产品推荐
相关产品推荐

