【发布时间】:2014-04-19 18:47:49
【问题描述】:
我发现如果你在 python 中设计你的导入函数来为每个节点使用一个事务,它会非常慢。
我有数百万个节点,必须以最快的方式处理它们。目前,我有一个 gremlin 脚本,它在生成器中返回一组节点和边。这是有效的,因为它是事务性的。但是,每当我遍历边缘时,我都必须知道将它们连接到我的应用程序的哪个节点;
我需要知道的是,对于任何边缘,边缘上的 inV 或 outV 是否会强制进行远程查找?
【问题讨论】:
我发现如果你在 python 中设计你的导入函数来为每个节点使用一个事务,它会非常慢。
我有数百万个节点,必须以最快的方式处理它们。目前,我有一个 gremlin 脚本,它在生成器中返回一组节点和边。这是有效的,因为它是事务性的。但是,每当我遍历边缘时,我都必须知道将它们连接到我的应用程序的哪个节点;
我需要知道的是,对于任何边缘,边缘上的 inV 或 outV 是否会强制进行远程查找?
【问题讨论】:
Gremlin 是在图形数据库服务器中运行的查询语言(可以将其想象为用于图形的 SQL——您可以每次都将完整的查询发送到服务器,或者您可以将 Gremlin 脚本存储在服务器上并执行它们像存储过程)。
有关如何使用服务器端 Gremlin 脚本(存储过程),请参阅这篇文章:
https://groups.google.com/d/topic/gremlin-users/Up3JQUwrq-A/discussion
如果您将查询拆分为多个 Bulbs 请求,则说明您做错了。不要对每个查询使用 Bulbs 的内置 inV() 和 outV() - 编写一个 Gremlin 脚本来为您执行完整的查询(这就是 Gremlin 所做的 - 它以一种有效的方式迭代图形,在内部图数据库)。
请参阅此示例了解如何在 Bulbs 中使用自定义 Gremlin 脚本(您可以将此技术用于事务请求和查询):
Is there a equivalent to commit in bulbs framework for neo4j
注意:上面的例子没有使用服务器端脚本——它每次都将脚本发送到服务器;但是,您可能希望将脚本存储在生产服务器上。
【讨论】: