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

Neo4j无休止的慢节点创建

孟健
2023-03-14

有数据集在. csv文件格式

"title"|year|"word"
"Into the Wild"|2007|"abandoned-bus"
"Into the Wild"|2007|"adolescence"
"Into the Wild"|2007|"adoption"

这个文件有超过4百万行。

我在远程超级计算机上运行数据库,我使用ssh隧道连接。我创建2个索引:

CREATE INDEX ON :MOVIE(title)
CREATE INDEX ON :KEYWORD(word)

然后执行查询:

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:c:/Users/.../Data/rels.csv" AS csv
FIELDTERMINATOR '|'
MERGE (m:MOVIE {title:csv.title })
ON CREATE SET m.year = toInt(csv.year)
MERGE (k:KEYWORD {word:csv.word})

过了一段时间,我不知道一个小时,有关查询执行的信息消失或出现未知错误。但是当我localhost:7474/webadmin统计数据时,节点数量增长非常缓慢——大约10秒内增加5-8个节点。

当我执行查询时:(我可以,因为没有显示正在运行的查询)

match (m)
return count(m)

大约有79K个节点。但在21小时内,这一数字正在增加。我需要创建大约120万个节点,然后在它们之间建立大约400万个关系。当我进行基本计算时,创建120万个节点将持续大约13天。我真的不想知道建立400万人的关系会持续多久。

发生了什么事?怎么扣?我能做什么呢?请帮忙。

注:

我以前已经创建了电影和关键字的节点,并且是从单独的csv文件中创建的,只包含电影或关键字,没有使用定期提交,而是手动选择了大约60K行并对其执行查询。但是我把它们全部删除了,以便在2个查询中使用关系,而不需要分割csv文件。无法想象手动将4M行文件划分为60K行文件。

共有1个答案

司马飞鸿
2023-03-14

我稍微改变了一下程序。

>

  • 从仅包含关键字的关键字csv加载所有160K关键字(几毫秒)

    使用PERIODIC COMMIT 1000 LOAD CSV with HEADERS from'file: c:/.../kw.csv'as csv CREATE(: KEYWORD{word:csv.word})

    从仅包含电影标题和年份(几秒钟)的电影csv加载所有200万部电影

    使用定期提交1000从“file:c:/…”加载带有标题的CSV/压敏电阻。csv'作为csv创建(:MOVIE{title:csv.title,year:toInt(csv.year)})

    在MOVIE和KEYWORD上创建索引

    CREATE INDEX ON:MOVIE(title)CREATE INDEX ON:MOVIE(year)CREATE INDEX ON:关键字(word)

    从包含电影标题、年份和关键字的csv加载关系(这需要几个小时,但速度相当快,可以在webadmin界面中看到进展)

    使用定期提交1000从“file:c:/…”加载带有标题的CSV/雷尔斯。csv'作为csv匹配(m:MOVIE{title:csv.title,year:toInt(csv.year)})匹配(k:KEYWORD{word:csv.word})合并(m)-[:HAS{weight:1}]-

    希望这对将来的人有帮助。

  •  类似资料:
    • 我正在构建一个应用程序,我的用户可以在其中管理字典。一个功能是上传一个文件来初始化或更新字典的内容。 我首先关注的结构部分是

    • 我还使用neo4j-enterprise-3.0.2,并使用BOLT连接将我的Pycharm python程序连接到数据库。我创建了许多节点和关系。我注意到,节点和关系的创建在一定时间后会大大减慢,在一定时间之后几乎不会进展。 我检查了以下 我对节点和属性使用了唯一的约束,以便可以使用模式索引轻松地在数据库中查找节点 我注意到,当所有这些事务发生时,我的RAM内存不断增加。我在dbms.memor

    • 我使用的是Spring数据Neo4j 3.3。1.2与Neo4j服务器一起发布。3. 我的问题是有一些节点是我的实体的副本,但它只有索引属性。 我的班级看起来像这样 当一个新节点被创建时,我首先检查是否有一个现有的节点,如果它存在就更新它,否则创建一个新的节点。 存储库接口。 在Neo4j中,实体被创建到具有所有属性的节点。但是有些节点也有一个只包含productId的重复节点。问题是这并没有发生

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

    • 我需要创建一个新的A类节点,它与User节点有关系: 现在,假设我们有新节点A的以下数据: 我试图创建节点A,使新节点A与具有“id”:4和“nodeId”:“0002-0002”(唯一节点标识符)的用户的(现有)节点之间具有关系,但用户节点将字段“name”和“firstName”更新为。 我正在使用GraphRespository代理创建它: 有没有办法不进行此更新,只与用户节点建立关系?

    • 我有一个csv格式的数据集。其中一个字段是“elem_type”。基于此类型,我需要创建不同的类型节点,并在使用csv load加载数据时,根据“elem_type”为csv的“列”赋予不同的名称,有什么方法可以做到这一点吗? 我的csv没有标头,数据如下所示: 基于第一个colmuns,即我的“elem_type”,我要加载数据并定义3种类型的节点(Person,Car,Boat)