将 MYSQL 数据库导入 NeO4j
Importing MYSQL database to NeO4j
我在远程服务器上有一个 mysql 数据库,我正试图将其迁移到 Neo4j 数据库中。为此,我将个人 tables 转储到 csv 文件中,现在计划使用 LOAD CSV 功能从 tables 创建图表。
加载每个 table 如何保持 table 之间的关系?
换句话说,我如何为整个数据库生成图表,而不仅仅是单个 table?
- 将每个 table 加载为 CSV
- 在你的关系字段上创建索引(Neo4j 只做单个 属性 索引)
- 使用 MATCH() 查找 table 之间的相关记录
- 使用 MERGE(a)-[:RELATIONSHIP]->(b) 创建 table 之间的关系。
运行 "all at once",这将创建一个大事务,不会完成,很可能会因堆错误而崩溃。解决这个问题需要首先加载 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 条记录创建该关系。 运行反复这样做最终会建立你想要的所有关系。
我在远程服务器上有一个 mysql 数据库,我正试图将其迁移到 Neo4j 数据库中。为此,我将个人 tables 转储到 csv 文件中,现在计划使用 LOAD CSV 功能从 tables 创建图表。
加载每个 table 如何保持 table 之间的关系? 换句话说,我如何为整个数据库生成图表,而不仅仅是单个 table?
- 将每个 table 加载为 CSV
- 在你的关系字段上创建索引(Neo4j 只做单个 属性 索引)
- 使用 MATCH() 查找 table 之间的相关记录
- 使用 MERGE(a)-[:RELATIONSHIP]->(b) 创建 table 之间的关系。
运行 "all at once",这将创建一个大事务,不会完成,很可能会因堆错误而崩溃。解决这个问题需要首先加载 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 条记录创建该关系。 运行反复这样做最终会建立你想要的所有关系。