2017-08-15 74 views
0

我在gremlin中有兩個查詢,第一個是添加一個頂點,第二個是在添加的頂點和圖中已存在的頂點之間添加一條邊。圖Cosmos上的交易DB

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; 

回答

0

不幸的是,當執行gremlin命令時,CosmosDB沒有支持事務。

就你而言,如果你還不是,我會建議至少使用Session consistency level。這將保證您讀取在同一個會話中執行的多個gremlin命令的寫入操作。默認情況下,DocumentClient假定目標文檔集合配置的一致性級別。

除此之外,當前對SDK中gremlin命令的支持不提供其他接近事務的技術。如果選擇使用Cosmos DB SQL命令或存儲的特效,還有其他選項可用,但這會妨礙您使用gremlin查詢來操作數據。

+1

你好,因爲這個答案是在一年前寫的 - 有沒有改變呢?是否有計劃將交易支持納入Microsoft.Azure.Graphs?謝謝 –