用于无向图的Nosql DB?

时间:2010-10-01 08:06:01

标签: database data-structures graph nosql breadth-first-search

我想存储数百万个节点的图表,其中每个节点以无向方式链接到另一个节点(点A到B,自动B指向A)。我已经将Neo4j,OrientDB作为可能的解决方案进行了检查,但它们似乎面向有向图,而Neo4j不能为> 100万个节点免费提供对我来说不是解决方案。

你能帮我解决哪些其他NoSQL数据库(Redis,CouchDB,MongoDB,......)最适合这样的事情以及如何实现?我想制作一个无属性(只给我链接的元素)广度优先查询有2个深度级别(有A< - > B,B< - > C,C< - > D,查询A应该给我B和C,但不是D)。

2 个答案:

答案 0 :(得分:5)

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

这里记录了GraphDB:http://code.google.com/p/orient/wiki/GraphDatabase。 Basilary您可以使用本机API或Blueprints实现。本机API具有SQL语言的演变,具有图形的特殊运算符。例如:

SELECT FROM Account WHERE friends TRAVERSE(1,7)(address.city.country.name ='New Zealand')

这意味着告诉我住在新西兰的这样的朋友的所有账户。朋友们被带到了深渊的第7层。

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

答案 1 :(得分:4)

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

现在已经删除了100万“原始”限制。如果您的代码是开源的,则可以将社区版本用于任何大小的数据库。对于其他情况,commercial versions包含一个free alternative