当前位置: 首页 > 知识库问答 >
问题:

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

杨海
2023-03-14

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

我首先关注的结构部分是Dictionary-[:CONTAINS]-

我读过很多关于使用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);
}

共有2个答案

廉展鹏
2023-03-14

试试下面的方法

  1. 在执行批处理操作时,使用本地Neo4j API而不是sping-data-neo4j。
  2. 分批提交,即可以为每500字

注意:SDN添加的某些属性(类型)在使用本机方法时将丢失。

姚淳
2023-03-14

我解决了这样的问题,只是创建一些CSV文件,然后从Neo4j读取它。需要采取以下步骤:

>

  • 写一些得到输入数据的类,并在此基础上创建CSV文件(它可以是每个节点类型的一个文件,甚至你可以创建用于构建关系的文件)。

    在我的例子中,我还创建了servlet,允许Neo4j通过HTTP读取该文件。

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

    >

    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)
    

  •  类似资料:
    • 问题内容: 我有一个存储在典型MySQL数据库中的表,并且已经使用java构建了一个小型解析器工具,以解析并构建neo4j数据库。该数据库将具有约4000万个节点,每个节点具有一个或多个边缘(最多可能有10个边缘)。问题来自我必须创建某些节点的方式。有一个用户节点,评论节点和标签节点。用户节点和主题标签节点必须各自唯一。我正在使用以下示例中的代码来确保唯一性: } 我已经考虑过使用批处理插入器,但

    • 有数据集在. csv文件格式 这个文件有超过4百万行。 我在远程超级计算机上运行数据库,我使用ssh隧道连接。我创建2个索引: 然后执行查询: 过了一段时间,我不知道一个小时,有关查询执行的信息消失或出现未知错误。但是当我localhost:7474/webadmin统计数据时,节点数量增长非常缓慢——大约10秒内增加5-8个节点。 当我执行查询时:(我可以,因为没有显示正在运行的查询) 大约有7

    •        点击后即可选中要素,然后通过点击需要插入节点的位置即可插入节点,并且可以通过拖拽形式对已插入的节点进行移动。

    • 假设我们有下面的Neo4j模式(简化了,但它显示了重要的一点)。有两种类型的节点和<代码>版本s通过关系的s可以通过关系连接。同样,这些关系有两个属性和,表示有效时间跨度-其中一个或两个可以(在Neo4j术语中不存在)表示无限。 编辑:节点和关系的有效性日期是独立的(尽管示例巧合地显示它们是对齐的)。 该示例显示了两个

    • 我在做一个程序,没有使用Java的内置链表类;我在从头开始做。除了编写一个将节点插入链表的特定位置的方法外,我在所有方面都取得了成功。 我有一个方法将一个特定的节点设置为“当前”节点。所以,例如,我有一个链表,看起来是这样的:猫-->狗-->使-->好-->宠物,“当前”等于2;这意味着“当前”节点是“狗”。 从这里开始,假设我想在“current”的位置插入一个新节点,它的info字段为AND。

    • 如果FreeRADIUS的部署为许多用户进行身份验证和记帐,则必须确保它按预期执行。 您可以从基线速度测试开始,该测试可以在将来用作参考。 要进行速度测试,JRadius Simulator非常理想且易于使用。