家谱图数据库

4

有人能指引我使用基因谱系图数据库的工作吗? 我想学习neo4j并且我使用Python,所以我想为自己制作一个谱系图数据库来学习。 我搜索了一些示例以模仿和学习(任何图形数据库,任何语言),但惊讶地发现很少。

请注意,我指的是具有不同结构的图形数据库而不是关系数据库。 请参见http://en.m.wikipedia.org/wiki/Graph_database

我正在寻找一个谱系图的示例架构。


什么是图形数据库?有模型可以将家谱信息存储在数据库中,但是图形需要由客户端的 GUI 或在 Web 应用程序的情况下由将模型转换为带有 Canvas 或 SVG 的 JavaScript 的框架呈现。 - peter
3
“graph” 在数学中也可以指代“一组节点和边构成的数学图形”。 - Hans Then
@Duncan 你尝试过查看Neo4j官方文档吗? - Hans Then
2个回答

4
如果您想学习如何使用图形数据库,您无需使用任何软件。铅笔、纸和大脑就可以了。设计时需要考虑以下几点:
  • 图是什么:顶点和边
  • 图形数据库数据结构的特点:顶点和边与类似于Python字典的关联。
  • 解决手头问题所需的信息需要在图形数据库中。列出您希望能够针对该图执行的所有查询。

在下面的图表中,您将看到一个可以成为您设计基础的图表。

naked graph that can be used to do genealogy queries

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

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

通过上面的图形,您可以计算:

  • X的父母是谁?
  • 最大家庭中父亲的姓名是什么?

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

  • 谁是拥有X作为祖先且仍然活着的人?

现在,如果您想使用Python进行实验,您有几种选择,从更简单的设置开始:

纯Python:

  • 创建一个继承dict的Vertex类和Edge类。
  • 使用Python代码从真实数据或其他地方构建一个家谱图。
  • 尝试查询。

Python和BerkleyDB

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

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

话虽如此,最好的解决方案可能涉及neo4j,但如果您想轻松切换多个数据库以找到性能最佳的数据库,则需要使用Rexster进行网络应用程序,或者使用Blueprints进行其他应用程序。直接使用neo4j服务器的唯一原因是能够使用cypher查询语言

如果我必须创建一个家谱网应用程序并将其打造成业务,我会使用我已经构建的软件,即:

但是这些软件还不适合直接投入生产。不过这就是我会做的事情。


2
如果你想要使用一个快速的数据库不需要服务器(和JVM),我建议你尝试全新的Sparksee(原名Dex)Python绑定。但是其原生API不具有可移植性。然而,它的性能是数量级更快的。
第二个选择是使用Bulbs,它通过Neo4j的REST API运行,也支持任何Rexsters服务器。查询语言是Gremlin(Cypher也可以)。好处是,如果其他后端更适合你的需求,你可以切换到不同的后端。
关于你的数据库方案,你至少拥有1个节点和1个边缘:
1个节点:PERSON(姓名、出生日期、死亡日期),这些都是有索引的字段。
从PERSON到PERSON的单向限制边缘,名称为:CHILD_OF或PARENT_OF。
你可以在节点之间添加更多的边缘,例如SIBLINGS,MARRIED_TO等。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接