一次使用宇宙图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包和随附的博客文章。希望在此期间,这将有助于您指出正确的方向,让我知道您是否对此方法有更多疑问。
假设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代码,所以你可以甚至编写循环以及不能创建顶点,附加属性等。
谢谢,我怀疑这应该是可能的,你在你的答案指出,以分号分隔多个g.addV语句,但是CosmosDb图形API似乎只是运行的第一条语句,而不是任何后续的。例如运行分号分开ADDV然后运行g.V()。COUNT()在一个空的集合返回刚才1.也许这是一些具体的事情到CosmosDB图形API的实现? – kmcnamee
如果那是真的,我会非常惊讶。这个客户端代码是否是开源的?你可以看一下并阅读代码,看看它如何处理你提交的脚本。但我真的会想象它只是将确切的脚本转发给GremlinServer。 – David
感谢您的建议。 SDK的源代码看起来还没有公开。然而,我没有旋转起来小提琴手,看看什么CosmosDB图形API发送到服务器。它看起来并不像它发送过来的小鬼脚本的ADDV但它发送过来的JSON其要插入的对象。所以看起来客户端库做了一些转换。对于一个简单的g.V()计数()将其发送过JSON与表单{ “查询” 的查询:“SELECT N_0从节点N_0 WHERE(IS_DEFINED(N_0。_isEdge)= false)“} – kmcnamee
我试图只使用一个CreateDocument调用来插入顶点和边,但结果是我的图丢弃了大部分的值,你能分享你上传的东西来创建对象吗? ! –
@MuriloMacielCurti我有同样的问题,但属性/值在我的情况下并没有丢失,当我使用文档db api检索它们时,我得到了它们,但它们在azure图形UI中不可见,而是属性在我的情况下,它显示了正确的ID和值'NativeVertex'的标签。很遗憾,我无法找到更多的细节。 –
@JesseCarter你可以分享更多?谢谢ChiefWiggum –