用于高效大规模图遍历的数据库

时间:2012-05-21 16:11:34

标签: mongodb networking graph database

我有一个大型的二分有向图数据集(约2000万个元素)。在目前的使用中,我运行遍历算法,每次运行达到约500,000个节点。这些算法有效,但历史上运行的是从文本文件加载到内存的数据。

文本文件似乎是一种糟糕的方法,因此我将数据作为邻接列表传输到mongoDB中,即。

{ _id: 1, children: [2, 3] }
{ _id: 2, children: [4] }
{ _id: 3, children: [5, 6, 7] }

这很有效,但我觉得这个模型对我正在做的事情效率很低。在伪代码中,从_ id:1 开始的广度优先搜索的查询结构如下所示:

children = getChildren(_id = 1)
for child in children
    grandchildren = getChildren(_id = child)
    // etc., either recursively or as a nested loop

我对数据库的问题是没有连接节点的逻辑。每个查询都必须遍历索引树,如果我没记错的话,它就是O(log N)。加载后文本文件方法为O(1),因为我可以制作一些简单的查找规则直接指向节点子节点。

TL; DR 有没有办法在O(1)时间内使用数据库遍历大型网络?

2 个答案:

答案 0 :(得分:2)

您可以尝试使用NoSQL图形数据库Neo4J。我没有使用它,但它承诺高性能。

答案 1 :(得分:0)

MongoDB不是一个多用途数据库。您显然对使用专用的专用图形数据库感兴趣。将MongoDB用于此类图形和相关搜索算法是不行的。