Neo4j:插入 7k 节点很慢(Spring Data Neo4j / SpringRestGraphDatabase)

2024-05-01

我正在构建一个应用程序,我的用户可以在其中管理字典。其中一项功能是上传文件以初始化或更新词典的内容。

我首先关注的结构部分是Dictionary -[:CONTAINS]->Word。 从一个空数据库(Neo4j 1.9.4,但也尝试过 2.0.0M5)开始,在分布式环境中通过 Spring Data Neo4j 2.3.1 访问(因此使用 SpringRestGraphDatabase,但使用 localhost 进行测试),我尝试加载 7k 个单词在 1 字典中。然而,我无法在带有核心 i7、8Gb RAM 和 SSD 驱动器(ulimit 提高到 40000)的 Linux 上在不到 8/9 分钟内完成它。

我读过很多关于使用 REST 加载/插入性能的文章,并且尝试应用我找到的建议,但运气不佳。由于我的应用程序限制,BatchInserter 工具对我来说似乎不是一个好的选择。

我可以希望在几秒钟而不是几分钟内加载 10k 个节点吗?

这是我在阅读完所有内容后想出的代码:

Map<String, Object> dicProps = new HashMap<String, Object>();
dicProps.put("locale", locale);
dicProps.put("category", category);
Dictionary dictionary = template.createNodeAs(Dictionary.class, dicProps);
Map<String, Object> wordProps = new HashMap<String, Object>();
Set<Word> words = readFile(filename); 
for (Word gw : words) {
  wordProps.put("txt", gw.getTxt());
  Word w = template.createNodeAs(Word.class, wordProps);
  template.createRelationshipBetween(dictionary, w, Contains.class, "CONTAINS", true);
}

我通过创建一些 CSV 文件然后从 Neo4j 读取它来解决这个问题。需要采取这样的步骤:

  1. 编写一些获取输入数据的类,并基于它创建 CSV 文件(它可以是每个节点类型一个文件,甚至您可以创建用于构建关系的文件)。

  2. 就我而言,我还创建了 servlet,它允许 Neo4j 通过 HTTP 读取该文件。

  3. 创建适当的 Cypher 语句,允许读取和解析该 CSV 文件。我使用了一些示例(如果您使用 Spring Data 还记得标签):

    • 简单的一个:

      load csv with headers from {fileUrl} as line 
         merge (:UserProfile:_UserProfile {email: line.email})
      
    • 更复杂:

      load csv with headers from {fileUrl} as line 
           match (c:Calendar {calendarId: line.calendarId})
           merge (a:Activity:_Activity {eventId: line.eventId})
      on create set  a.eventSummary = line.eventSummary,
           a.eventDescription = line.eventDescription,
           a.eventStartDateTime = toInt(line.eventStartDateTime),
           a.eventEndDateTime = toInt(line.eventEndDateTime),
           a.eventCreated = toInt(line.eventCreated), 
           a.recurringId = line.recurringId
      merge (a)-[r:EXPORTED_FROM]->c
      return count(r)
      
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Neo4j:插入 7k 节点很慢(Spring Data Neo4j / SpringRestGraphDatabase) 的相关文章

  • 一起使用 MongoDB 和 Neo4j

    我正在开始一个新项目 我正在考虑使用 MongoDB 作为文档存储工具 使用 Neo4j 作为映射文档之间关系的机制 然后我想通过 REST API 公开查询结果 人们会说这样做的优点和缺点是什么 是否有更好的方法可以使用不同的 NoSQL
  • 使用cypher删除neo4j中的所有节点和关系超出堆空间

    我一直在尝试按照 neo4j google 组和其他在线来源的建议运行此查询 开始 n 节点 匹配 n r 其中 ID n gt 0 删除n r 为了删除测试之间的所有节点和关系 当我从控制台执行此操作时 我用完了 java 堆空间 当我从
  • 如何在java中使用cypher加载CSV文件?

    我是密码新手 我想在java中使用cypher加载csv 我用谷歌搜索并找到了以下作品 LOAD CSV WITH HEADERS FROM http neo4j com docs 2 3 1 csv import movies csv A
  • 如何使用 nosql 构建成就和徽章

    我目前有一个使用 mongodb 作为数据库的社交游戏应用程序 我的问题是 如果我想创建一个积分和徽章系统 有哪些建议 成就 徽章的业务逻辑可能会变得非常复杂并且非常临时 因此实时授予徽章似乎效率不高 我想象将跟踪的操作添加到队列中的某处
  • 如何禁用 Spring Data Neo4j 的登录

    我从 spring neo4j 收到不需要的查询日志 如下所示 25 08 2018 23 47 07 597 restartedMain INFO o n o d bolt request BoltRequest executeReque
  • Neo4j - 根据关系属性查找两个节点之间的最短路径

    我试图弄清楚是否有某种方法可以根据关系总和获得两个节点之间的最短距离 给出以下示例 neo4j 图像示例 https i stack imgur com fiJe1 png 上图代码 CREATE some point 1 Point ti
  • 如何从 Neo4j 服务器插件登录?

    我正在尝试调试我正在编写的 Neo4J 服务器插件中的问题 有可以输出的日志吗 在哪里或如何执行此操作并不明显 好问题 我想你可以使用 Java 日志记录吗 这应该被路由到正常的日志系统中
  • 使用 cypher 和 apoc 将数百万个节点添加到 neo4j 空间层

    我有一个包含 380 万个节点的数据集 我正在尝试将所有这些加载到 Neo4j 空间中 节点将进入一个简单的点层 因此具有所需的纬度和经度字段 我试过了 MATCH d pointnode WITH collect d as pn CALL
  • Cypher Linked List:如何按索引取消移位和替换

    我正在尝试按照此处的推荐使用 Neo Cypher 创建链表结构 创建时CYPHER存储相同标签的节点关系顺序 https stackoverflow com questions 33263822 cypher store order of
  • 在 Ubuntu 中更改 Neo4j 中的数据存储位置

    我已经成功安装了neo4j 端口号为7474 并且工作正常 我的问题是数据存储在 var lib neo4j 该目录中的该位置很快就会满 我想更改数据存储位置 这怎么可能 我尝试编辑该文件 etc neo4j neo4j server pr
  • 如何检索多个深度关系的节点 Neo4j Database Cypher?

    假设有一个简单的图如下 City name gotham lt LOCATED Tower name abc lt LOCATED Bank name CityBank City name gotham lt LOCATED Cinema
  • 如何在图数据库(如 Neo4j)中对现实世界的关系进行建模?

    我有一个关于在图形数据库中建模的一般性问题 但我似乎无法解决这个问题 您如何建模这种类型的关系 牛顿发明了微积分 In a 简单图 http docs neo4j org chunked snapshot graphdb neo4j rel
  • Neo4j 中合并和创建唯一之间的区别

    我试图找出合并和创建唯一之间的区别 我知道这些功能 合并 如果不存在模式 我可以创建节点 MERGE n name X RETURN n 这将创建具有属性名称的节点 n 空节点 m 和关系 RELATED MERGE n name X RE
  • 如何将map或json对象存储为neo4j中的属性?

    我正在尝试将地图或 json 对象存储为 Neo4j 中的属性 但它不起作用 这是目前节点属性的限制 您有几种解决方法可供选择 您可以将 json 对象转换为字符串并将其保存为属性 您可以使用APOC程序 https neo4j com l
  • 在json文件中导出neo4j数据库

    我想以 JSON 文件导出 Neo4j 图形数据库 This is a Export JSON button in Neo4j web UI version as shown in attached image below 但是 Neo4j
  • Neo4j 服务器无法使用非托管扩展启动

    我正在尝试在 neo4j 服务器 版本 CE 2 3 2 上使用非托管扩展 所以我正在尝试一个简单的你好世界的例子 http neo4j com docs stable server unmanaged extensions htmlNeo
  • MongoDB + Neo4J vs OrientDB vs ArangoDB [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我目前正处于 MMO 浏览器游戏的设计阶段 游戏将包括一些实时位置的图块地图 因此每个单元格的图块数据 和通用世界地图 我更喜欢使用 Mongo
  • Neo4j Cypher:在用另一个节点替换节点之前传输所有关系

    我试图在删除第一个节点之前将所有传入和传出关系从一个节点转移到另一个节点 他们都有相同的标签 我看到了这个Neo4j Cypher 复制关系并删除节点 https stackoverflow com questions 21634936 n
  • neo4j合并2个或多个重复节点

    我使用 cypher 手动输入 Neo4j 数据库 因此很容易出现创建重复节点等错误 重复的节点将与其他节点具有各自的关系 是否有内置函数可以合并这些节点 或者我应该手动完成 听起来可能 但密码脚本很复杂 获取每个重复节点的关系 使用正确的
  • “neo4j-admin”不被识别为内部或外部命令、可操作程序或批处理文件

    我正在尝试将 neo4j 2 2 数据导入 neo4j 3 1 文档 https neo4j com docs operations manual current upgrade deployment upgrading 告诉我跑 neo4

随机推荐