一次使用宇宙图DB-API

问题描述:

插入多个顶点,我希望快速插入使用Azure的宇宙图的DB-API多个顶点。目前大多数微软样本的创建顶点逐一执行小鬼查询每一个,就像这样:一次使用宇宙图DB-API

IDocumentQuery<dynamic> query = client.CreateGremlinQuery<dynamic>(graph, "g.addV('person').property('id', 'thomas').property('name', 'Thomas').property('age', 44)"); 

while (query.HasMoreResults) 
{      
    foreach (dynamic result in await query.ExecuteNextAsync()) { 
     Console.WriteLine($"\t {JsonConvert.SerializeObject(result)}"); 
    } 
    Console.WriteLine(); 
} 


query = client.CreateGremlinQuery<dynamic>(graph, "g.addV('person').property('id', 'mary').property('name', 'Mary').property('lastName', 'Andersen').property('age', 39)"); 

while (query.HasMoreResults) 
{      
    foreach (dynamic result in await query.ExecuteNextAsync()) { 
     Console.WriteLine($"\t {JsonConvert.SerializeObject(result)}"); 
    } 
    Console.WriteLine(); 
} 

然而,这是不太理想的时候,我想创建一对夫妇一千顶点和边最初填充该图可能需要一些时间。

这是Microsoft.Azure.Graphs库v0.2.0预览

我怎样才能有效地在一次宇宙DB添加多个顶点,所以我可以在以后的查询使用图形API的语法?

我发现,种子图形中的最快的方法是实际使用文档API。利用这种技术,我能够在单个开发机器上每秒插入5500个顶点/边缘。诀窍是了解Cosmos期望的边和顶点格式。只需通过小鬼API添加两个顶点和边到你的图,然后通过将数据资源管理器中的Azure和执行文件查询SELECT * FROM c检查这些文件的格式。

在工作中我已经建立了使用反射采取波苏斯的边和顶点,并将它们转换为您在门户网站上查看该格式的光ORM。我希望很快能够开源,在这一点上,我很可能会发布一个Nuget包和随附的博客文章。希望在此期间,这将有助于您指出正确的方向,让我知道您是否对此方法有更多疑问。

+0

我试图只使用一个CreateDocument调用来插入顶点和边,但结果是我的图丢弃了大部分的值,你能分享你上传的东西来创建对象吗? ! –

+0

@MuriloMacielCurti我有同样的问题,但属性/值在我的情况下并没有丢失,当我使用文档db api检索它们时,我得到了它们,但它们在azure图形UI中不可见,而是属性在我的情况下,它显示了正确的ID和值'NativeVertex'的标签。很遗憾,我无法找到更多的细节。 –

+1

@JesseCarter你可以分享更多?谢谢ChiefWiggum –

假设CosmosDB是100%兼容TinkerPop有关,并取决于小鬼执行超时设置,你应该能够更新脚本小鬼在同一时间做一些操作。

例如:

g.addV('person').property('id', 'mary').property('name', 'Mary').property('lastName', 'Andersen').property('age', 39)

可以转化为:

g.addV('person').property('id', 'mary').property('name', 'Mary').property('lastName', 'Andersen').property('age', 39); g.addV('person').property('id', 'david').property('name', 'David').property('lastName', 'P').property('age', 24);

和等等等等

你的小鬼的脚本也只是Groovy代码,所以你可以甚至编写循环以及不能创建顶点,附加属性等。

+0

谢谢,我怀疑这应该是可能的,你在你的答案指出,以分号分隔多个g.addV语句,但是CosmosDb图形API似乎只是运行的第一条语句,而不是任何后续的。例如运行分号分开ADDV然后运行g.V()。COUNT()在一个空的集合返回刚才1.也许这是一些具体的事情到CosmosDB图形API的实现? – kmcnamee

+0

如果那是真的,我会非常惊讶。这个客户端代码是否是开源的?你可以看一下并阅读代码,看看它如何处理你提交的脚本。但我真的会想象它只是将确切的脚本转发给GremlinServer。 – David

+0

感谢您的建议。 SDK的源代码看起来还没有公开。然而,我没有旋转起来小提琴手,看看什么CosmosDB图形API发送到服务器。它看起来并不像它发送​​过来的小鬼脚本的ADDV但它发送过来的JSON其要插入的对象。所以看起来客户端库做了一些转换。对于一个简单的g.V()计数()将其发送过JSON与表单{ “查询” 的查询:“SELECT N_0从节点N_0 WHERE(IS_DEFINED(N_0。_isEdge)= false)“} – kmcnamee