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

时间:2018-06-24 20:07:51

标签: azure graph azure-cosmosdb gremlin

这是我的情况: 我希望有一个单一的集合,在其中可以使用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查询时,出现相同的错误:g.V('aaa')=>从'System.String'到'Newtonsoft.Json.Linq.JObject'的无效转换。 结论:我以前的库的第一个问题并没有用新的库解决。

  • 第三个问题:使用SqlApi查询时返回的json与使用Microsoft.Azure.Graphs.dll时收到的json的边或顶点不同。看起来cosmos db引擎根据程序集处理gremlin脚本的方式有所不同。我应该期望哪种json格式?

注释:

-为什么我需要使用SqlApi创建顶点? 因为我想用自定义对象创建属性,而我不能用graphApi做到这一点: 示例:{“ Id”:“ aaa”,“ Custom”:{“ Id”:456,“ Code”:{“ Id”:555,“ Name”:“ Hi”}}

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

有人关于这种情况的一些信息吗? 帮助将不胜感激。

0 个答案:

没有答案