2010-10-01 31 views
4

我想存储一个数百万节点的图,其中每个节点以无向的方式链接到另一个节点(点A到B,自动B指向A)。我已经研究过Neo4j,OrientDB作为可能的解决方案,但它们似乎以有向图为导向,Neo4j对于超过100万个节点不是免费的,对我来说不是一个解决方案。用于无向图的Nosql DB?

你能帮我其他的NoSQL数据库(Redis,CouchDB,MongoDB,...)最适合这样的事情吗?它如何实现?我想做一个没有财产(只给我的链接元素)广度优先查询2深度级别(具有A < - > B,B < - > C,C < - > D,查询A应该给我B和C,但不是D)。

+0

查询位很有意思!我从Cassandra的角度考虑了这一点,虽然存储可以通过单列系列来实现,但我不确定如何处理2深度级别查询条件。需要更多的时间:) – 2010-10-01 11:03:05

回答

4

Neo4j始终按指示存储关系/边,但在遍历/查询时,通过使用Direction.BOTH或在某些情况下根本不定义方向,可以轻松地将图视为无向。 (这种方式不需要双“边”来覆盖两个方向,只需忽略方向 - 并且在“向后”移动边时没有性能损失)。

100万“基元”现在一会儿。如果您的代码是开源的,则可以使用社区版本来处理任何大小的数据库。对于其他情况,有commercial versions其中包括一个free alternative

+0

在遍历遍历关系的方向时会有性能损失吗? – JohnnyM 2013-05-09 23:06:02

5

OrientDB对节点数没有限制。此外,默认模型是双向的。您也可以将其用于商业用途,因为应用的许可证是Apache 2.

GraphDB在此处记录:http://code.google.com/p/orient/wiki/GraphDatabase。 Basilary可以使用本地API或Blueprints实现。本地API使用特殊的图表操作符来演示SQL语言。例如:

选择帐户,让朋友遍历(1,7)(address.city.country.name =“新西兰”)

这意味着,给我所有的朋友这样生活在新西兰的帐户。朋友被带到了第七层的深处。

第二个允许使用完整的Blueprint堆栈,如Gremlin语言来创建您的超复杂查询。