使用局部性的图数据库

npo*_*cop 5 database graph bigdata directed-acyclic-graphs

DAG =有向无环图; roots =没有传入边的顶点.

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

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

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

所以我的DAG可以被认为是大量的小树,只有少数几棵相交.

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

它可以被认为是批量查询:给定数千个根节点,返回从那里可到达的所有节点.

据我所知,有一些算法可以改善图形的磁盘存储局部性.三个例子是:

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

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

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

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

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

lgy*_*lym 1

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