Graph Cosmos DB上的交易

时间:2017-08-15 10:27:06

标签: c# transactions gremlin azure-cosmosdb

我在gremlin中有两个查询,第一个是添加顶点,第二个是在添加的顶点和图形中存在的顶点之间添加边。

string query1 = $"g.addV('session').property('id','{session_id}').property('initialState', 'start')";
string query2 = $"g.V('{session_id}').addE('belongs').to(g.V('{userId}'))";

当我用C#编写程序时,确保上述两个命令运行的第一个想法是运行,或者两者都没有,在C#中使用TransactionScope。但是,它没有解决我的问题,因为它不在Cosmos DB上。问题是如何在C#中的Graph Cosmos DB上的事务中执行这些命令?

有什么技巧可以在gremlin中解决这个问题吗? graph.tx().commit()是否适用于Cosmos DB?

// In A Transaction Scope
IDocumentQuery<dynamic> query = database.Client.CreateGremlinQuery<dynamic>(database.Graph, query1);
query.ExecuteNextAsync().Result;

query = database.Client.CreateGremlinQuery<dynamic>(database.Graph, query2);
query.ExecuteNextAsync().Result;

2 个答案:

答案 0 :(得分:0)

不幸的是,CosmosDB在执行gremlin命令时没有支持事务。

在您的情况下,如果您尚未使用,我建议至少使用会话consistency level。这将保证您在同一会话中执行的多个gremlin命令中读取您的写入。默认情况下,DocumentClient采用目标文档集合配置的一致性级别。

除此之外,SDK中对gremlin命令的当前支持不提供其他近似事务的技术。如果选择使用Cosmos DB SQL命令或存储过程,还有其他选项可用,但这会阻止您使用gremlin查询来操作数据。

答案 1 :(得分:0)