4

有人可以指点我将图形数据库用于家谱吗?我想学习neo4j,我使用python,所以我想为自己制作一个家谱图数据库来学习图数据库。我搜索了示例来模拟和学习(任何图形数据库,任何语言),但很惊讶我发现的很少。

注意我的意思是图形数据库,它的结构与关系数据库不同。请参阅http://en.m.wikipedia.org/wiki/Graph_database

我正在寻找家谱的示例模式。

4

2 回答 2

4

如果你想学习做graphdb,你不需要使用任何软件。铅笔、纸和大脑都可以。想出一个设计你需要记住的事情是:

  • 什么是图:顶点和边
  • graphdb 数据结构的具体内容:顶点和边与类似 python 的字典相关联。
  • graphdb 中需要哪些信息来解决我手头的问题。列出您希望能够对图表执行的所有查询。

在下图中,您将看到可以作为设计基础的图表。

可用于进行家谱查询的裸图

您必须想象每个节点都有一个名称、出生日期等……和一个唯一标识符。

它代表了两个不相干的家庭,左边一个有两个孩子,右边一个有三个孩子。

使用上图,您可以计算:

  • X的父母是谁?
  • 最大家族的父亲叫什么名字?

而其他人,由于只有两个家庭,只有父母和孩子,没有祖父母或孙子女代表,您可能无法理解实际上您还可以计算以下查询:

  • 以X为祖先的人还活着的人是谁?

现在,如果您想尝试使用 Python,您可以从更简单的设置开始有多种选择:

纯蟒蛇:

  • 创建一个继承dict的Vertex类和Edge类。
  • 使用来自真实数据的 Python 代码构建家谱图。
  • 尝试查询。

Python 和 BerkleyDB

  • 免责声明:这是我的一个项目
  • 与纯 Python 版本相同,只是图形保存在数据库中。API 类似于 neo4j python 绑定。

它们是其他解决方案,但如果没有关于目标应用程序(例如 Web 或桌面)的更多上下文,我无法将它们全部列出。它们是neo4j 网站上的一些信息,可能会有所帮助。

也就是说,最好的解决方案可能涉及 neo4j,但如果您想在多个数据库之间轻松切换以找到在您的用例性能方面最佳的数据库,则需要用于网络应用程序的 Rexster 或用于其他应用程序的蓝图。直接使用 neo4j 服务器的唯一原因是能够使用密码查询语言

如果我必须创建一个家谱 webapp 并从中建立业务,我会使用我已经构建的软件,即:

这些还没有准备好按原样生产。但这就是我会做的。

于 2014-03-23T15:24:29.033 回答
2

如果您想在没有服务器(并且没有 JVM)的情况下使用快速数据库。我建议你尝试全新的Sparksee(以前是 Dex)python 绑定。然而,原始 API 是不可移植的。然而,性能要快几个数量级。

第二种选择是使用Bulbs,它通过其 REST api 在 Neo4j 之上运行,它还支持任何 Rexsters 服务器。查询语言是 Gremlin(Cypher 也可以)。好处是,如果它更适合您的需求,您可以切换到不同的后端。

关于您的数据库方案,您至少有 1 个节点和 1 个边缘:

1 个节点:PERSON(姓名、出生、死亡),它们是索引字段。

1 条从 PERSON 到 PERSON 的定向受限边,名为:CHILD_OF 或 PARENT_OF。

您可以在节点之间添加更多边,例如:SIBLINGS、MARRIED_TO 等。

于 2014-03-23T15:39:44.113 回答