簡體   English   中英

Cosmos Db: SQL API + Graph API -- 真的是多模型嗎?

[英]Cosmos Db: SQL API + Graph API -- Really multi-model?

這是我的場景:我想要一個單一的集合,我可以在其中使用 SqlApi 插入和查詢文檔,並使用 Graph Api 創建頂點和邊,所有這些都在同一個集合中。 考慮到我在文檔中閱讀的內容,我相信這是可能的。

我的第一次嘗試是使用 Microsoft.Azure.Graphs.dll通過這種方法,我能夠對 Sql Api 執行 CRUD 操作,並對集合執行 gremlin 腳本。 請務必注意,使用 Sql api Insert 命令創建的文檔用作頂點。 然后我使用圖 api 連接使用 Sql Api 創建的文檔創建邊。這按預期工作。 我遇到的唯一問題是,如果文檔包含數組屬性,則圖形 Api 返回並出現錯誤:從“System.String”到“Newtonsoft.Json.Linq.JObject”的無效轉換。 經過調查,我被告知 Microsoft.Azure.Graphs.dll 已被棄用,我應該改用 Gremlin.Net。 我沒有在任何地方讀到該程序集已被棄用,甚至在官方文檔和示例中我也可以看到正在使用該程序集。 它真的被棄用了嗎? 我不應該使用它嗎?

然后這是我的第二次嘗試:我搬到了 Gremlin.net。

  • 第一個問題:我連接到最初為 Sql Api 創建的集合。當我嘗試連接 Gremlin.Net 客戶端時,它告訴我無法連接到服務器。 當我為圖 Api 創建另一個數據庫和集合時,我能夠連接。 結論:不可能將 Gremlin.net 與使用 Sql Api 創建的集合一起使用。或者是否可以在數據庫中激活 gremlin 端點 Sql Api?

使用圖形 Api 的新集合我再次嘗試使用 Sql Api 創建文檔,然后使用圖形 Api 進行連接。我看到在這種情況下創建了兩個端點:SqlApi+Gremlin。 我在制作這個作品時遇到了一些問題。 例如,我必須將 GraphSon 寫入器和讀取器設置為版本 2,否則我將收到 null 引用異常。

  • 第二個問題:我能夠使用 Sql Api 創建文檔,但我遇到了與數組屬性相同的問題(示例文檔 { "id":"aaa" "Prop": [ "1", "2"] } )我得到當我用 gremlin 查詢時出現同樣的錯誤:gV('aaa') => 從'System.String'到'Newtonsoft.Json.Linq.JObject'的無效轉換。 結論:我在舊庫中遇到的第一個問題在新庫中沒有得到解決。

  • 第三個問題:用SqlApi查詢邊或頂點返回的json和用Microsoft.Azure.Graphs.dll收到的不一樣。 看起來 cosmos db 引擎根據程序集以不同方式處理 gremlin 腳本。 我應該期待哪種 json 格式?

筆記:

- 為什么我需要使用 SqlApi 創建頂點? 因為我想用自定義對象創建屬性,而我無法使用 graphApi 來實現:示例:{ "Id": "aaa", "Custom": { "Id": 456, "Code": { "Id ": 555, "姓名": "嗨"} }

- 為什么我要使用SqlApi 查詢圖形? 因為我想訪問我的自定義屬性。 因為我想使用標記進行分頁。 (范圍 gremlin function 性能不佳。它遍歷從 0 到我想要的最后一頁的所有頂點/邊)

有人有關於這種情況的一些信息嗎? 幫助將不勝感激。

我知道這篇文章有點舊,但看起來可以使用 graph 和 sql api。關鍵是在使用 sql api 進行查詢/操作時采用 gremlin 的底層存儲格式。 請查看這篇文章: https://vincentlauzon.com/2017/09/05/hacking-accessing-a-graph-in-cosmos-db-with-sql-documentdb-api/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM