DAG = 有向无环图;roots = 没有入边的顶点。
我有一个比可用内存更大的DAG,因此我需要一个基于磁盘的图形数据库来处理它。
我的DAG很浅:我有数十亿个根节点,但从每个节点只能到达几十个节点。
它也没有很好的连接性:大多数节点只有一个入边。因此,对于任何一对可达的根节点,子图通常只有很少的公共节点。
因此,我的DAG可以被看作是许多小树的集合,其中只有少数交叉。
我需要批量执行以下查询:给定一个根节点,获取从它可达的所有节点。
它可以被视为批量查询:给定几千个根节点,返回从那里可达的所有节点。
据我所知,有算法可以改善图形的磁盘存储局部性。以下是三个例子:
支持Win64,并且可以从除Java之外的其他东西中使用数据库是一个加分项。
我有一个比可用内存更大的DAG,因此我需要一个基于磁盘的图形数据库来处理它。
我的DAG很浅:我有数十亿个根节点,但从每个节点只能到达几十个节点。
它也没有很好的连接性:大多数节点只有一个入边。因此,对于任何一对可达的根节点,子图通常只有很少的公共节点。
因此,我的DAG可以被看作是许多小树的集合,其中只有少数交叉。
我需要批量执行以下查询:给定一个根节点,获取从它可达的所有节点。
它可以被视为批量查询:给定几千个根节点,返回从那里可达的所有节点。
据我所知,有算法可以改善图形的磁盘存储局部性。以下是三个例子:
- http://ceur-ws.org/Vol-733/paper_pacher.pdf
- http://www.cs.ox.ac.uk/dan.olteanu/papers/g-store.pdf
- http://graphlab.org/files/osdi2012-kyrola-blelloch-guestrin.pdf
我的问题是:有没有适合我的工作负载的图形数据库?Neo4j依赖于图形数据访问方法,而不考虑数据局部性,处理图形主要涉及随机数据访问。对于无法存储在内存中的大型图形,随机磁盘访问成为性能瓶颈。
支持Win64,并且可以从除Java之外的其他东西中使用数据库是一个加分项。