将关系数据库转换为图形数据库

时间:2014-12-10 14:56:41

标签: postgresql graph neo4j etl

作为我最后论文的一部分,我必须将面向图形数据库中的关系数据库,特别是PostgreSQL数据库转换为Neo4j嵌入式数据库。现在,方式就是问题所在。在Rik Van Bruggen的书中:学习Neo4j,他提到了使用Trascend和MuleSoft工具使用ETL活动的数据导入过程,但在他们的官方网站上,没有关于如何做到的文档,也没有帮助文档也不是例子。除了这些工具之外,还可以使用其他方法来转换此信息而不使用我自己的代码?

3 个答案:

答案 0 :(得分:4)

LOAD CSV可能是您的最佳选择,但当然这意味着首先输出CSV。这里有一些很棒的资源:

http://neo4j.com/docs/stable/query-load-csv.html

http://watch.neo4j.org/video/112447027

http://jexp.de/blog/2014/06/load-csv-into-neo4j-quickly-and-successfully/

http://jexp.de/blog/2014/10/load-cvs-with-success/

http://www.markhneedham.com/blog/2014/10/23/neo4j-cypher-avoiding-the-eager/

我还编写了一个ruby gem,它允许你编写一些ruby代码来从各种来源导入数据。它被称为neo4apis。您可以查看neo4apis-twitter gem以了解其工作原理:

https://github.com/neo4jrb/neo4apis-twitter/

https://github.com/neo4jrb/neo4apis-twitter/blob/master/lib/neo4apis/twitter.rb

我实际上一直想要实现一个neo4apis-activerecord,以便通过ActiveRecord轻松导入SQL

答案 1 :(得分:4)

一些建模建议:

由于性能原因尚未非规范化的良好规范化关系模型可以转换为等效图模型。 图形模型形状主要由用例驱动,因此之后将有机会进行优化和模型演化。

良好的,规范化的实体关系图通常已经代表了一个不错的图模型。 因此,如果您仍然可以使用orignal ER图表,请尝试将其用作指南。

以下是一些可以帮助您进行转型的提示:

  • 每个实体表由节点上的标签
  • 表示
  • 表中的每一行都是一个节点
  • 这些表上的列成为节点属性。
  • 删除技术主键,保留业务主键
  • 为业务主键添加唯一约束,为频繁查找属性添加索引
  • 将外键替换为与另一个表的关系,然后将其删除
  • 使用默认值删除数据,无需存储
  • 非规范化和重复的表中的数据可能必须被拉出到单独的节点中以获得更清晰的模型。
  • 索引列名称可能表示数组属性(如email1,email2,email3)
  • JOIN表转换为关系,这些表上的列成为关系属性

在开始导入数据之前了解图模型非常重要,然后它就变成了保护模型的任务。

答案 2 :(得分:1)

您不能直接从关系导出数据并导入到neo4j。

因为这是两种不同的数据库结构。

关系数据库 -
关系数据库是一组表,其中包含适合预定义类别的数据。每个表(有时称为关系)在列中包含一个或多个数据类别。每行包含列定义的类别的唯一数据实例。

面向图形的数据库 -

图形数据库本质上是节点和边缘的集合。每个节点代表一个实体(例如个人或企业),每个边代表两个节点之间的连接或关系。

解决您的问题 -

首先,您需要设计Neo4j数据结构。例如,您需要的节点是什么,节点之间的关系是什么。

之后,使用应用程序语言创建脚本以从关系数据库中获取数据并将其插入neo4j。

加载CSA 是使用图形数据库导入/导出(备份)功能的选项。您无法直接从关系数据库导出/导入数据到图表数据库