使用局部性的图数据库

时间:2014-06-08 12:32:57

标签: database graph bigdata directed-acyclic-graphs

DAG =有向无环图; roots =不带入边的顶点。

我的DAG比可用RAM大,所以我需要一个基于磁盘的图形数据库来处理它。

我的DAG很浅:我有数十亿个根节点,但是从每个节点只能访问几十个节点。

它也没有很好地连接:大多数节点只有一个传入边缘。因此,对于任何一个根节点,可到达的子图通常只有很少的节点。

所以我的DAG可以被认为是大量的小树,其中只有少数相交。

我需要在批量号码上对我的DAG执行以下查询:给定根节点,从中获取所有节点。

它可以被认为是一个批处理查询:给定几千个根节点,返回从那里可以到达的所有节点。

据我所知,有一些算法可以改善图形的磁盘存储位置。三个例子是:

似乎还有老一代图形数据库不使用图形局部性。例如一个流行的Neo4j图形数据库:

http://www.ibm.com/developerworks/library/os-giraph/

  

Neo4j依赖于图形的数据访问方法而不考虑   数据局部性,图的处理主要包含随机数据   访问。对于无法存储在内存中的大型图形,随机磁盘   访问成为性能瓶颈。

我的问题是:是否有适合我工作量的图表数据库?

对Win64的支持以及从Java以外的其他方式使用数据库的可能性是一个优势。

1 个答案:

答案 0 :(得分:1)

从任务本身来看,您似乎不需要图形数据库。 您可以简单地使用一些外部存储器编程库,例如stxxl。 首先在图形上进行拓扑排序(边缘格式)。然后,您只能顺序扫描,直到完成所有“根节点”。 I / O复杂性受拓扑排序的限制。实际上你不需要拓扑排序,只需要识别根节点。这可以通过边缘表和节点表的连接来完成,这是线性时间。