Neo4j:使用 Cypher 批量关联节点的最佳方法?

2024-01-11

当我运行一个尝试批量合并特定类型的所有节点的脚本时,我得到了一些奇怪的性能结果。

当合并 2 个节点集合 (~42k) 和 (~26k) 时,性能良好且快速。 但是当我合并(~42)和(5)时,性能急剧下降。我正在对 ParentNode 进行批处理(因此 (~42k) 分成 500 个批次。为什么当我实质上合并较少的节点时(当批处理集相同,但批处理集的源较高而目标集较低时),性能会下降?

关系查询:

MATCH (s:ContactPlayer)   
WHERE  has(s.ContactPrefixTypeId)    
WITH  collect(s) AS allP   
WITH  allP[7000..7500] as rangedP   
FOREACH  (parent in rangedP  |  
    MERGE (child:ContactPrefixType 
            {ContactPrefixTypeId:parent.ContactPrefixTypeId}
          )  
    MERGE (child)-[r:CONTACTPLAYER]->(parent)  
    SET r.ContactPlayerId = parent.ContactPlayerId ,      
        r.ContactPrefixTypeId = child.ContactPrefixTypeId  )

性能结果:

进程启动

开始插入联系人项目 [++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++ ++++++]


  • 42149个联系人项目的总时间:19176.87ms
  • 每批平均时间(500):213.4ms
  • 最长批处理时间:663ms

开始插入 ContactPlayer 项目 [++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++]


  • 27970 个 ContactPlayer 项目的总时间:9419.2106ms
  • 每批次平均时间(500):167.75ms
  • 最长批处理时间:689ms

开始将联系人与 ContactPlayer 关联起来 [++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++]


  • 将联系人关联到 ContactPlayer 所需的总时间:7907.4877ms
  • 每批平均时间(500):141.151517857143ms
  • 最长批处理时间:883.0918ms 批处理编号:0

开始插入 ContactPrefixType 项
[+]


  • 5 个 ContactPrefixType 项目的总时间:22.0737ms
  • 每批次平均时间(500):22ms
  • 最长批处理时间:22ms

已插入联系人数据。

开始将 ContactPrefixType 与联系人关联起来 [++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++ ++++++]


  • 将 ContactPrefixType 与联系人关联所需的总时间:376540.8309ms
  • 每批平均时间(500):4429.78643647059ms
  • 最长批处理时间:14263.1843ms 批处理号:63

到目前为止,我能想到的最好的方法如下(这是一个针对我的环境的黑客攻击):

如果/否则条件:

If childrenNodes.count() < 200-> 假设它们是父级的类型标识符...即ContactPrefixType

否则假设它是一个将多个项目类型关联在一起的矩阵(即联系地址)

If childNodes < 200

MATCH (parent:{parentLabel}), 
(child:{childLabel} {{childLabelIdProperty}:parent.{parentRelationProperty}})
CREATE child-[r:{relationshipLabel}]->parent

每个关系类型大约需要 3-5 秒才能完成

Else

MATCH (child:{childLabel}), 
(parent:{parentLabel} {{parentPropertyField : child.{childLabelIdProperty}})
WITH collect(parent) as parentCollection, child
WITH parentCollection[{batchStart}..{batchEnd}] as coll, child
FOREACH (parent in coll | 
CREATE child-[r:{relationshipLabel}]-parent )

我不确定这是最有效的方法,但在尝试了许多不同的选项之后,这似乎是最快的。

Stats:

  1. 插入具有 2,070,977 个属性的 225,018 个节点
  2. 创建 464,606 个关系

总计:331 秒。

因为这是直接导入,而且我还没有处理更新,所以我假设所有关系都是正确的,不需要担心无效数据...但是,我将尝试将属性设置为关系类型,以便以便稍后能够执行清理功能(即将父级和子级 Id 作为属性存储在关系类型中以供以后参考)

如果有人可以改进这一点,我会很高兴。

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

Neo4j:使用 Cypher 批量关联节点的最佳方法? 的相关文章

  • 无论如何,在一个 neo4j 实例上有多个数据库?

    从关系数据库的思维方式来看 每个 Neo4j 实例只有一个图形数据库似乎很奇怪 我们的想法是从根开始创建多个子图吗 Thanks 根 节点的概念正在消失 这存在很多问题 其中大部分与节点密度有关 我相信您问题的核心在于数据库设计 以及拥有多
  • Neo4j 查询中“开始流式传输”和“已完成”有什么区别?

    在 Neo4j 浏览器中 当我分析查询时 我得到 在 129 毫秒后开始流式传输 162063 条记录 并在 13793 毫秒后完成 是否在 129 毫秒后就全部收集到了结果 但将它们输出到浏览器却花了 13793 毫秒 另外 当我在 Cy
  • 我可以在 CREATE 或 SET 上参数化标签和属性吗? (休息和事务)

    我有一个疑问 1 CREATE a 1 s props b 2 s props2 b 3 s relProps gt a 2 MATCH a 1 s value value 2 s gt b WHERE b 3 s SET b props
  • 实用地将数据从 Neo4j 导出到 csv 文件

    我需要你关于 neo4j 导出的建议 我使用 apoc export cypher query 将节点和关系导出到 csv 文件 但是导出的内容是 cypher 语句 这是导出的 csv 文件示例 begin CREATE ITEM UNI
  • Gremlin 删除所有顶点

    我知道如何在 Gremlin 中通过 id 删除顶点 但现在我需要清理数据库 如何删除多个顶点 删除1v是这样的 ver g v 1 g removeVertex ver 我的意思是类似SQL的东西TRUNCATE 如何在不删除类的情况下删
  • neo4j 使用选项卡加载 CSV

    我正在尝试使用以下命令加载 csv 并在 neo4j 2 1 0 中创建节点 使用定期提交 从 file c temp listings TXT 加载 CSV AS 行 FIELDTERMINATOR t CREATE p person i
  • Neo4j 的数据库级验证

    我使用 Neo4j 作为我的图形数据库 假设我想限制用户名字段的长度小于10 有没有办法在数据库级别施加这样的约束 现在 您必须在应用程序级别上执行此操作 或者通过注册一个事务提交挂钩来检查该属性字段是否符合特定标准 See http do
  • 如何在 Neo4j 遍历的每一步中指定使用哪种关系类型作为当前节点的函数?

    我想使用 neo4j 遍历 API 遍历我的图 但我需要能够指定在每一步使用哪种关系类型 并且要使用的关系类型需要是当前节点的函数 有没有办法做到这一点 在当前的 Traverser API 中 您无法选择要遍历的确切关系 相反 您可以采用
  • 在 Neo4j 中可视化连接的组件

    我可以使用下面的代码找到图中最密集连接的组件 CALL algo unionFind stream pnHours YIELD nodeId setId groupBy setId storing all node ids of the s
  • 使用 Cypher,如何返回仅包含其属性子集的节点

    假设我在 Neo4j 中创建了一个节点 CREATE Thing a foo b bar 我可以编写一个查询来获取该节点及其所有属性 MATCH n Thing a foo RETURN n 返回 a foo b bar 但是是否可以匹配一
  • 如何将dbpedia导入neo4j? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要将 dbpedia 导入 neo4j 我从这里下载 dbpedia http wiki dbpedia org Download
  • 如何在neo4j中显示屏幕上的所有节点

    我有近 5000 个节点Recipes和 5 个节点Meal Types在 Neo4j 数据库中 目前他们之间没有任何关系 我正在下面运行 CQL MATCH n RETURN n LIMIT 100000 这运行良好 但它返回与相关的节点
  • 有没有办法从密码结果中删除 _id _type

    我使用 apoc convert toTree 过程将查询结果转换为树 然后过滤结果以仅获取几个属性 但是 在生成的有效负载中 我得到了两个无法删除的属性 id 和 type 这是我的查询 我应该只获取 prefLabel 和 uri MA
  • 如何禁用 Spring Data Neo4j 的登录

    我从 spring neo4j 收到不需要的查询日志 如下所示 25 08 2018 23 47 07 597 restartedMain INFO o n o d bolt request BoltRequest executeReque
  • 如何返回每个另一个节点属性的最大计数

    我需要计算一位作曲家的音乐作品每十年被演奏了多少次 然后只返回每十年演奏次数最多的一首作品 除了过滤除每十年最高计数之外的所有内容之外 该密码可以执行所有操作 match c Composer CREATED BY w Work lt 2
  • 启用远程访问neo4j 4.2社区版

    由于在家工作 我需要一种方法来监视远程 neo4j 实例 最好通过 Web 浏览器实例 在过去 例如在3 0中 它可以通过以下方式轻松实现修改单个配置行 https neo4j com developer kb how do i enabl
  • 同时运行 Gremlin-Server 和 NEO4J Server

    目前看来我们不能同时运行两者Neo4J服务器 and Gremlin服务器同时 有什么办法可以同时运行两者吗 NEO4J 正在运行 我尝试启动 Gremlin Server 然后出现以下错误 java lang RuntimeExcepti
  • 如何从 Neo4j 服务器插件登录?

    我正在尝试调试我正在编写的 Neo4J 服务器插件中的问题 有可以输出的日志吗 在哪里或如何执行此操作并不明显 好问题 我想你可以使用 Java 日志记录吗 这应该被路由到正常的日志系统中
  • 如何转储 neo4j 图形数据库?

    我将所有数据库存储在一个位置C JATIN DATA 数据库 neo4jDatabases 如何使用 neo4j Desktop 单独转储所有数据库 我已经尝试过 neo4j admin dump database to 这个命令但出现错误
  • 如何结识有相同兴趣的朋友的朋友?

    交朋友的朋友很容易 我得到了这个 看起来效果很好 g v 1 in FRIEND in FRIEND filter it g v 1 但我想做的只是结交有相同兴趣的朋友的朋友 下面我希望 Joe 被推荐为 Moe 而不是 Noe 因为他们没

随机推荐

  • 管道中的控制台输出:Jenkins

    我创建了一个复杂的管道 在每个阶段我都称之为工作 我想查看 Jenkins 某个阶段中每个作业的控制台输出 如何获得 从构建步骤返回的对象可用于查询日志 如下所示 pipeline agent any stages stage test s
  • 为什么我不能在具有类型参数的特征上添加一揽子实现?

    考虑这两个特征 pub trait Foo fn new arg u32 gt Self pub trait Bar p Foo fn with parameter arg u32 parameter P gt Self 我想添加毯子暗示
  • Push Segue 在 iOS 5 中不起作用

    我对 IOS 非常陌生 我正在使用情节提要功能来创建应用程序 这就是我想要的 我有两个视图控制器 一个 ViewController 和两个 ViewController 我在一个 ViewController 中有一个按钮 O 按住 ct
  • 迭代通过域模型上的 linq 查询返回的对象的属性和值

    我在关系数据库中有一个自定义实体 我已通过域模型将其映射到 CLR 因此 通过使用以下语句 我可以通过域模型上的 LINQ 查询将实体从数据库拉入内存 如下所示 var inspection from i in dbContext New
  • 在 swift 中将 JSON 对象解析为字符串数组

    我有以下 Json 响应 language en textAngle 0 orientation Up regions boundingBox 96 29 244 474 lines boundingBox 96 29 58 12 word
  • 使用字符串/分类特征(变量)进行线性回归分析?

    回归算法似乎正在研究以数字表示的特征 例如 该数据集不包含分类特征 变量 如何对这些数据进行回归并预测价格是非常清楚的 但现在我想对包含分类特征的数据进行回归分析 有5特征 District Condition Material Secur
  • -1 * int.MinValue == int.MinValue??这是一个错误吗?

    在 C 中我看到了 1 int MinValue int MinValue 这是一个错误吗 当我尝试实现搜索树时 它真的把我搞砸了 我最终使用了 int MinValue 1 这样我就可以正确地否定它 这不是一个错误 int MinValu
  • Java在C中的易失性?

    我知道使用volatile在爪哇 即 基于维基百科文章 http en wikipedia org wiki Volatile variable 对易失性对象的读取和写入存在全局顺序 多变的 这意味着每个访问易失性字段的线程 将在继续之前读
  • 如何使用 python/distutils 依赖系统命令?

    我正在寻找最优雅的方式来通知我的库的用户他们需要特定的 unix 命令来确保它能够工作 什么时候是我的库提出错误的最佳时间 安装 当我的应用程序调用命令时 在导入我的库时 both 还有你应该如何检测命令是否丢失 if not comman
  • 查看模板代码标签 - asp.net mvc - regd

    在 asp net MVC 视图引擎上下文中 和 之间有什么区别 在MVC2书中给出如下 代码块在视图模板呈现时执行代码 代码块执行其中包含的代码 然后将结果呈现到模板的输出流 什么时候使用第一个 什么时候使用第二个 这本书几乎是正确的 代
  • findViewById(R.id.content) 和 getRootView() 之间的区别[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions findViewById R id
  • log4j2配置中RollingFile和RollingRandomAccessFile有什么区别

    在我们当前的实现中 其中一台服务器具有为 RollingRandomAccessFile 和另一个 RollingFile 设置的 log4j2 配置 如果可能的话 我想知道两者之间的区别以及各自的优缺点 Thanks 主要区别在于性能 h
  • 如何将拉取请求合并到我的 github 项目的功能分支中?

    有人通过 fork 向我的 GitHub 项目提交了拉取请求 我不想直接合并到 master 中 而是更愿意将更改合并到功能分支中 以便我可以在将最终产品合并到 master 之前进行一些小的编辑 如果可能的话 我希望 GitHub 向提交
  • 'c:/wamp64/bin/php/php7.0.10/ext/php_oci8_12c.dll' - %1 不是有效的 win32 应用程序

    为了从 php 访问远程 Oracle 数据库 我必须激活扩展php oci8 12c 但是当我这样做时 它不会出现在phpinfo 另一方面 我在 php 日志中收到错误消息 13 Jan 2017 08 39 48 UTC PHP 警告
  • 更改 MS Access 元素的默认样式

    当我向表单添加任何元素 如文本框 标签等控件 时 它的默认样式为 字体 Calibri 详细 字体大小 11 前景色 文本 2 浅 40 怎么可能改变这一点 我需要 MS Sans Serif 8 黑色作为默认值 Thanks 在 Acce
  • 如何读取javascript变量中的文件内容?

    我有一个小脚本 用于在每 4 个字符之后分割 var foo 内的文本 它运行良好 但我的实际数据位于文本文件 a txt 中 如何将整个文件文本放入 var foo 中 并将分割输出写入另一个文本文件 var foo this is sa
  • 按下背面退出 Android 应用程序

    我正在构建一个 Android 应用程序 如何在按下返回键时退出 Android 应用程序 Android版本为2 3 3及以上 Android 应用程序会转到我不想要的先前活动 Try this public void onBackPre
  • 错误:“MSVCP90.dll:没有此类文件或目录”,即使安装了 Microsoft Visual C++ 2008 Redistributable Package

    我正在尝试通过执行从源代码构建一个包python setup py py2exe 这是 setup py 中的代码部分 我认为相关 if sys platform win32 For py2exe import matplotlib sys
  • 降低非焦点项目的不透明度

    我有一个显示在主屏幕上的项目列表 该列表可以垂直滚动 目前我有 5 个项目 但当用户接近最后一个项目时会添加项目 从而创建无限滚动 我想让所有项目淡出 但焦点所在的项目应该完全透明 如下所示 正如您所看到的 左侧和右侧的项目已褪色并且稍小
  • Neo4j:使用 Cypher 批量关联节点的最佳方法?

    当我运行一个尝试批量合并特定类型的所有节点的脚本时 我得到了一些奇怪的性能结果 当合并 2 个节点集合 42k 和 26k 时 性能良好且快速 但是当我合并 42 和 5 时 性能急剧下降 我正在对 ParentNode 进行批处理 因此