Cosmos Db:SQL API +图形API –真的是多模型吗?

Jua*_*ani 5 graph azure gremlin azure-cosmosdb

这是我的场景:我想拥有一个单一的集合,在这里我可以使用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 Client时,它告诉我无法连接到服务器。当我为图形Api创建另一个数据库和集合时,我能够进行连接。 结论:不能将Gremlin.net与通过Sql Api创建的集合一起使用。还是可以使用Sql Api在数据库中激活gremlin端点?

使用针对Graph Api的新集合,我再次尝试使用Sql Api创建文档,然后使用Graph Api进行连接。我看到在这种情况下,两个端点都被创建:SqlApi + Gremlin。我在使这项工作可行时遇到了一些问题。例如,我必须将GraphSon编写器和读取器设置为版本2,否则,我会收到空​​引用异常。

  • 第二个问题:我能够使用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,”名称“:” Hi“}}

-为什么要使用SqlApi查询图形?因为我要访问我的自定义属性。因为我想使用标记进行分页。(范围gremlin函数不起作用。它遍历从0到我想要的最后一页的所有顶点/边)

有人对此情况有所了解吗?帮助将不胜感激。

TCh*_*ick 0

我知道这篇文章有点旧,但看起来可以使用 graph 和 sql api。关键是在使用 sql api 进行查询/操作时采用 gremlin 的底层存储格式。请查看这篇文章: https://vincentlauzon.com/2017/09/05/hacking-accessing-a-graph-in-cosmos-db-with-sql-documentdb-api/