我在 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;
最佳答案
不幸的是,CosmosDB 在执行 gremlin 命令时不支持事务。
对于您的情况,我建议至少使用 Session consistency level如果你还没有。这将保证您在同一 session 中执行的多个 gremlin 命令中读取您的写入。默认情况下,DocumentClient
采用目标文档集合配置的一致性级别。
除此之外,当前对 SDK 中的 gremlin 命令的支持不提供可以近似处理的其他技术。如果选择使用 Cosmos DB SQL 命令或存储过程,还有其他选项可用,但这会阻止您使用 gremlin 查询对数据进行操作。
关于c# - Graph Cosmos DB 上的交易,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45691040/