图数据库利用局部性

5
DAG = 有向无环图;roots = 没有入边的顶点。
我有一个比可用内存更大的DAG,因此我需要一个基于磁盘的图形数据库来处理它。
我的DAG很浅:我有数十亿个根节点,但从每个节点只能到达几十个节点。
它也没有很好的连接性:大多数节点只有一个入边。因此,对于任何一对可达的根节点,子图通常只有很少的公共节点。
因此,我的DAG可以被看作是许多小树的集合,其中只有少数交叉。
我需要批量执行以下查询:给定一个根节点,获取从它可达的所有节点。
它可以被视为批量查询:给定几千个根节点,返回从那里可达的所有节点。
据我所知,有算法可以改善图形的磁盘存储局部性。以下是三个例子: 看起来还有旧一代的图形数据库不利用图形局部性。例如一个流行的Neo4j图形数据库: http://www.ibm.com/developerworks/library/os-giraph/

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

我的问题是:有没有适合我的工作负载的图形数据库?
支持Win64,并且可以从除Java之外的其他东西中使用数据库是一个加分项。

有类似的情况。你实际上使用了什么? - SomeUsername1
1个回答

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

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