【问题标题】:Importing MYSQL database to NeO4j将 MYSQL 数据库导入 NeO4j
【发布时间】:2016-04-18 15:19:20
【问题描述】:

我在远程服务器上有一个 mysql 数据库,我正在尝试将其迁移到 Neo4j 数据库中。为此,我将各个表转储到 csv 文件中,现在计划使用 LOAD CSV 功能从表中创建图表。

加载每个表如何保持表之间的关系? 换句话说,我怎样才能为整个数据库生成一个图表,而不仅仅是一个表?

【问题讨论】:

  • 有关如何将 Northwind 数据集导入 Neo4j 的示例,请参见 this page

标签: mysql csv graph neo4j foreign-key-relationship


【解决方案1】:
  1. 将每个表加载为 CSV
  2. 在关系字段上创建索引(Neo4j 只做单一属性索引)
  3. 使用 MATCH() 定位表之间的相关记录
  4. 使用 MERGE(a)-[:RELATIONSHIP]->(b) 创建表之间的关系。

“一次性”运行,这将创建一个大型事务,不会完成,并且很可能会因堆错误而崩溃。解决这个问题需要先加载 CSV,然后以 10K-100K 事务块的批量创建关系。

实现该目标的一种方法是:

MATCH (a:LabelA)
MATCH (b:LabelB {id: a.id}) WHERE NOT (a)-[:RELATIONSHIP]->(b)
WITH a, b LIMIT 50000
MERGE (a)-[:RELATIONSHIP]->(b)

它的作用是查找与 :LabelA 记录没有关系的 :LabelB 记录,然后为其找到的前 50,000 条记录创建该关系。重复运行此操作最终将创建您想要的所有关系。

【讨论】:

  • 谢谢蒂姆,初次导入后如何保持数据同步?
  • 您必须转储增量,执行完整转储并刷新数据库,或者在更新 sql 数据库时更改应用程序以更新图形数据库。
猜你喜欢
  • 1970-01-01
  • 2012-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-21
  • 2018-02-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多