mongodb - 在 mongodb 中存储图形

我有一个无向图,其中每个节点都包含一个数组。可以从数组中添加/删除数据。将其存储在 Mongodb 并能够有效地执行此查询的最佳方法是什么:给定节点 A,选择 A 的相邻节点中包含的所有数据。

在关系数据库中,您可以创建一个表示边的表和另一个表来存储每个节点中的数据。

table 1 
NodeA, NodeB
NodeA, NodeC

table 2 
NodeA, item1
NodeA, item2
NodeB, item3 

然后在查询相邻节点中的数据时加入表。但是在 MongoDB 中连接是不可能的,那么设置这个数据库并有效地查询相邻节点中的数据的最佳方法是什么(在空间上稍微有利于性能)。

最佳答案

专业的分布式图数据库

我知道这听起来与 OPs 关于 Mongo 的问题有点遥远,但现在有更多专业的图形数据库擅长此类工作,并且可能更容易使用,尤其是在大型图形上。

这里有 7 种此类产品的比较:https://docs.google.com/spreadsheet/ccc?key=0AlHPKx74VyC5dERyMHlLQ2lMY3dFQS1JRExYQUNhdVE#gid=0

在三个最重要的开源产品(Titan、OrientDB 和 Neo4J)中,它们都支持 Tinkerpop Blueprints 界面。所以对于一个看起来像这样的图表......

...查询“自 2011 年以来朱诺非常钦佩的人”将如下所示:

Iterable<Vertex> results = juno.query().labels("knows").has("since",2011).has("stars",5).vertices()

当然,这只是冰山一角。相当强大的东西!

如果你必须留在 Mongo

将 Tinkerpop 蓝图视为各种数据库中的“存储图形结构的 JDBC”。 Tinkerpop Blueprints API 有一个特定的 MongoDB 实现,我相信它会为您工作。然后使用 Tinkerpop Gremlin,您可以使用各种高级遍历和搜索方法。

https://stackoverflow.com/questions/5125709/

相关文章:

perl - 如何加快 MongoDB 插入/秒?

mongodb - 如何从 tar.gz 文件安装 Robomongo 作为 Ubuntu 15.1

c# - ORM 与 NoSQL API 是多余的吗?

ruby-on-rails - Heroku 的 Rails、Mongoid 和 Unicorn 配

mongodb - Mongorestore 不知道如何处理文件 "db/collection.bs

bash - 设置 Mongodb 文件夹的读/写权限

mongodb - mongo的命令行身份验证失败

javascript - Mongoose 填充嵌入式

mongodb - 为什么我不能使用 Homebrew 更新到最新的 MongoDB?

mongodb - Mongo 组并推送 : pushing all fields