c# - Graph Cosmos DB 上的交易

标签 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;

最佳答案

不幸的是,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/

相关文章:

c# - 如何使用 System.IO.DirectoryInfo 访问映射的网络驱动器?

c# - 如何使用LINQ查找值的总和

c# - 为什么 gzip/deflate 压缩小文件会导致许多尾随零?

mysql - 锁定库存表的表和/或事务?

java - Tinkerpop3 连接到远程 TitanDB 服务器

c# - 如何在 Windows Phone 上使用 Auth Token 获取 Google Tasks (REST API)

sql - 在事务提交之前,在事务中进行的插入是否可以通过 SELECT 看到

transactions - Redis中的流水线与事务

graph - 如何将新属性添加到 gremlin 中的现有顶点?

python-3.x - 使用 aiogremlin 连接到 Neptune