4

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

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

4

2 回答 2

5

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

GraphDB 记录在这里:http ://code.google.com/p/orient/wiki/GraphDatabase 。基本上,您可以使用本机 API 或蓝图实现。原生 API 是 SQL 语言的演变,带有用于图形的特殊运算符。例子:

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

这意味着把所有住在新西兰的朋友的账户都给我。朋友被带到深度的第 7 级。

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

于 2010-10-01T14:14:35.060 回答
4

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

100 万个“原始”限制已经取消了很长一段时间。如果您的代码是开源的,您可以将社区版本用于任何规模的数据库。对于其他情况,有商业版本,其中包括一个免费的替代方案

于 2010-10-01T13:19:58.400 回答