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

Postgresql 将关系数据库转换为图形数据库,postgresql,graph,neo4j,etl,Postgresql,Graph,Neo4j,Etl,作为我最后论文的一部分,我必须将关系数据库转换为面向图形的数据库,特别是PostgreSQL数据库,转换为Neo4j嵌入式数据库。现在,问题出在方法上。在Rik Van Bruggen的书:Learning Neo4j中,他提到了一个使用ETL活动和Trascend和MuleSoft工具的数据导入过程,但在他们的官方网站上,没有关于如何实现的文档,也没有帮助文档和示例。除了这些工具之外,我还可以使用哪些其他方法来转换这些信息而不使用自己的代码?加载CSV可能是最好的选择,但这当然意味着首先输出C

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

加载CSV
可能是最好的选择,但这当然意味着首先输出CSV。以下是一些很棒的资源:

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


实际上,我一直想实现一个Neo4API activerecord,以便使用activerecord轻松地从SQL导入数据。您不能直接从关系数据库导出数据并导入neo4j

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

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

面向图形的数据库-

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

解决您的问题-

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

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

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

一些建模建议:

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

一个好的、规范化的实体关系图通常已经表示了一个像样的图形模型。 因此,如果您仍然可以使用原始ER图,请尝试将其用作指南

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

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

在开始导入数据之前,了解图形模型非常重要,然后就成了补充该模型的任务。

CSV导入?你看过这个吗?您是否在询问如何将关系数据转换为图形?或者你是在问如何将关系模型转换成图形模型?你真的检查过他的网站吗:他有两个例子。还可以查看musicbrainz的博客文章,我已经尝试过了,但是源数据集不在同一个表中,它们在数据库的许多表中都是无序的。真的,我已经尝试了所有的加载CSV。感谢您的回答,这真是出乎意料(我在这个网站上的第一个问题),在过去的这段时间里,我找到了一个解决方案:在java应用程序中创建一个ETL过程,它使用postgres驱动程序和neo4j嵌入式库,可以工作!迈克尔,再次谢谢你。我接受了你的建议。作为问题的解决方案,我创建了一个ETL过程,将所需数据从关系模型转换为面向对象的图形数据库。这项任务很困难,而且当数据没有按预期的方式分发时也是如此。在我的数据库源代码中,表并不表示实体,所有必需的概念(节点和关系)都是无组织的,因此这使转换过程变得复杂。