使用 cypher 将节点插入 Neo4j 数据库的最有效方法是什么

2024-01-03

我试图通过使用 py2neo python 模块 (py2neo.cypher.execute) 执行 cypher 命令,将大量节点(~500,000)插入到(非嵌入式)neo4j 数据库中。最终我需要消除对 py2neo 的依赖,但我目前正在使用它,直到我了解有关 cypher 和 neo4j 的更多信息。

我有两个节点类型A和B,并且绝大多数节点都是A类型。r1和r2有两种可能的关系,例如A-[r1]-A和A-[r2]-B。 A 类型的每个节点将有 0 - 100 个 r1 关系,B 类型的每个节点将有 1 - 5000 个 r2 关系。

目前我正在通过构建大型 CREATE 语句来插入节点。例如我可能有一个声明

CREATE (:A {uid:1, attr:5})-[:r1]-(:A {uid:2, attr:5})-[:r1]-...

其中...可能是另外 5000 个左右的节点和关系,在图中形成线性链。这工作正常,但速度相当慢。我还使用索引这些节点

CREATE INDEX ON :A(uid)

添加所有 A 类型节点后,我再次使用 CREATE 语句添加 B 类型节点。最后,我尝试使用类似的语句添加 r2 关系

MATCH c:B, m:A where c.uid=1 AND (m.uid=2 OR m.uid=5 OR ...)
CREATE (m)-[:r2]->(c)

其中...可以代表几千个 OR 语句。这看起来真的很慢,每秒只添加几个关系。

那么,有更好的方法吗?我在这里完全偏离轨道了吗?我在看这个问题 https://stackoverflow.com/questions/12643662/fastest-way-to-perform-bulk-add-insert-in-neo4j-with-python但这并没有解释如何使用 cypher 来有效地加载节点。我看到的其他所有内容似乎都使用 java,但没有显示可以使用实际的密码查询。


直到最后才创建索引(在 2.0 中)。它将减慢节点创建速度。

您在 Cypher 中使用参数吗?

我想你会损失很多密码解析时间,除非你的密码每次都与参数完全相同。如果您可以将其建模为这样,您将看到性能显着提高。

您已经在 cypher 请求中发送了相当大的块,但是批处理请求 API 将允许您发送多个合一的 REST 请求,这可能会更快(尝试一下!)。

最后,如果这是一次性导入,您可以考虑使用批量导入工具——即使在糟糕的硬件上,它也可以在几分钟内烧毁 500K 个节点……然后您可以升级数据库文件(我不这样做)认为它可以创建 2.0 文件,但如果不能的话,可能很快就会出现),并通过 Cypher 创建标签/索引。

Update:我刚刚注意到你最后的 MATCH 声明。您不应该这样做——一次处理一个关系,而不是对 ids 使用 OR。这可能会有很大帮助——并确保您使用 uids 参数。 Cypher 2.0 似乎无法使用 OR 进行索引查找,即使您使用索引提示也是如此。也许这会稍后发生。

2013 年 12 月更新:2.0 具有 Cypher 事务端点,我已经看到它的吞吐量有了很大的提高。我已经能够每秒发送 20-30k Cypher 语句,使用 100-200 条语句的“exec”大小,总共 1000-10000 条语句的事务大小。对于加速 Cypher 加载非常有效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 cypher 将节点插入 Neo4j 数据库的最有效方法是什么 的相关文章

随机推荐

  • Angula2 Karma 无法加载“webpack”!

    我已经在 Angular2 项目 Webpack Karma 上工作了几个月 该项目基于此入门程序的稍旧版本 https github com preboot angular2 webpack https github com preboo
  • 带注入的定制 Serilog 水槽?

    我创建了一个简单的 Serilog 接收器项目 如下所示 namespace MyApp Cloud Serilog MQSink public class MessageQueueSink ILogEventSink private re
  • 无法使用@Value在Spring应用程序中获取maven project.version属性

    如何使用 Value注释在Spring Boot应用程序中获取maven project version属性 经过一些关于如何在 SpringBoot 应用程序中获取 Maven 项目版本的研究和试验后 我找不到任何适合我的东西 由于类加载
  • 为 Goldschmidt 部门挑选良好的初步估计

    我正在计算 Q22 10 中的定点倒数戈德施密特师 http en wikipedia org wiki Division digital Goldschmidt division用于我的 ARM 上的软件光栅器 只需将分子设置为 1 即可
  • 实体 .ToList() 生成 System.OutOfMemoryException

    我有一个包含 50 万行的表 我需要更新每一行 但 ToList 失败 List
  • 数组访问可以优化吗?

    也许我被我的分析器 Netbeans 误导了 但我看到了一些奇怪的行为 希望这里有人可以帮助我理解它 我正在开发一个应用程序 它大量使用相当大的哈希表 键是长整型 值是对象 内置的 java 哈希表 特别是 HashMap 的性能非常差 在
  • SonarQube 临时磁盘空间

    我发现 SonarQube 正在使用lot其临时目录中的磁盘空间 是否有某种定期运行的清理程序来清除它 opt codehaus releases sonarqube sonarqube 5 1 temp 29 7GiB tmp
  • UIViewController调用对方的delegate

    我有两个 UIViewController 每个都有它的委托 并且正在调用其中一个 一个类称为 TopicViewController 另一个类称为 MentionViewController 代码如下所示 import
  • JavaScript 中比较 null 与 undefined 的速度

    我刚刚运行了一个非常简单的 JavaScript性能测试 http jsperf com js coerce null 不要问为什么 该测试声明了一个变量 但没有为其分配任何内容 var x 然后它比较比较值变量的速度null 并undef
  • Rails 3 / Devise:不再创建密码盐?

    我已经在一个项目上工作了一段时间 该项目使用 Devise 进行用户身份验证 每当创建用户时 它都会为他们生成密码盐及其加密密码 当我进入这个项目的尾声时 我正在测试用户注册 并注意到我的新角色没有在数据库中为这些新用户创建密码盐 而我的旧
  • 如何在Java中更改HTML标签内容?

    如何更改Java中标签的HTML内容 例如 before div text div text div text div after div text div new text div text div 我尝试过 JTidy 但不支持getT
  • 将数组格式的字符串转换为javascript数组[重复]

    这个问题在这里已经有答案了 我有一个这种格式的字符串 A B C 我想将它转换为数组 A B C 我尝试使用JSON parse 但它不起作用 任何帮助 将不胜感激 const strArray A B C const parsedStri
  • 使用 LINQ 读取 Csv

    我有一个像这样的 csv 文件 A 22 23 12 B 32 4 33 C 34 3 33 我想打印每行的总和和平均值并跳过第一列 如何在 LINQ 中使用 Lambda 进行操作 var stuff from l in File Rea
  • 在AndroidTestCase中使用@Ignore

    我正在使用 AndroidTestCase 进行一些单元测试 并且想知道是否可以使用我在 junit4 中读过的忽略注释 仅使用注释就会出现错误 也许有什么特别需要注意的地方 提前感谢 马库斯 您可以使用 Suppress在测试用例类或单个
  • DECLARE_DYNAMIC 和 DECLARE_DYNCREATE 之间的区别?

    你能让我知道两者之间有什么区别吗DECLARE DYNAMIC and DECLARE DYNCREATE 我们到底可以在哪里使用它们 第一个声明类具有运行时类型信息 第二个声明可以在运行时动态创建实例 MSDN 文档对此进行了详细描述 请
  • 如何用C#实现Lua容器(虚拟文件系统)模块加载器

    听起来有点可怕不是吗 一些背景信息 我想使用 LuaInterface 将包含一些 lua 模块的 tar 存档加载到我的 C 应用程序中 最简单的方法是将这些文件提取到临时文件夹 修改 lua 模块搜索路径并像往常一样使用 require
  • Woocommerce 产品库图像显示为全尺寸图像而不是缩略图

    该网站当前的 Woocommerce 设置正常提供主产品图像和多个图库图像 主要产品图像已正确使用 以便它显示在列表中 单击后 将打开产品页面 但是 在此产品页面中 Woocommerce 上提供的图库图像在屏幕右侧以全尺寸图像的形式显示在
  • adb 无法识别 Nexus 7 平板电脑

    我的 android sdk 和我的平板电脑出现一些奇怪的行为 我正在尝试通过以下方式识别我的平板电脑 adb devices l command 每次我插入平板电脑时 计算机上都会弹出一个窗口 询问我将平板电脑识别为相机 并询问我想用什么
  • 由于无法处理“${project.artifactId}”,无法构建 docker 映像:替换中缺少 ':'

    我正在尝试使用以下命令为 Maven 项目构建 docker 映像 mvn clean install DskipTests Pdocker 我有以下内容Dockerfile FROM openjdk 8 jre ARG serviceus
  • 使用 cypher 将节点插入 Neo4j 数据库的最有效方法是什么

    我试图通过使用 py2neo python 模块 py2neo cypher execute 执行 cypher 命令 将大量节点 500 000 插入到 非嵌入式 neo4j 数据库中 最终我需要消除对 py2neo 的依赖 但我目前正在