kef*_*hou 31 database graph mongodb
我有一个无向图,每个节点都包含一个数组.可以从阵列中添加/删除数据.什么是在Mongodb中存储它的最佳方法,并且能够有效地执行此查询:给定节点A,选择A中相邻节点中包含的所有数据.
在关系数据库中,您可以创建一个表示边的表,另一个表用于在每个节点中存储数据.
table 1
NodeA, NodeB
NodeA, NodeC
table 2
NodeA, item1
NodeA, item2
NodeB, item3
Run Code Online (Sandbox Code Playgroud)
然后在查询相邻节点中的数据时加入表.但是在MongoDB中无法加入,因此设置此数据库并有效查询相邻节点中的数据的最佳方法是什么(有利于稍微超出空间的性能).
jks*_*der 17
我知道这听起来有点像关于Mongo的OP问题,但是现在有更多的专业图形数据库在这种工作中表现出色,并且可能更容易使用,尤其是在大型图形上.
此处对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()
Run Code Online (Sandbox Code Playgroud)
当然,这只是冰山一角.相当强大的东西!
将Tinkerpop Blueprints视为各种数据库中的"存储图形结构的JDBC".Tinkerpop Blueprints API有一个特定的MongoDB实现,我相信它对您有用.然后使用Tinkerpop Gremlin,您可以使用各种先进的遍历和搜索方法.
Chu*_*uck 15
我正在接受mongo,也在研究这种模式(无向图,查询来自邻居的信息)我认为到目前为止我喜欢的方式看起来像这样:
每个节点都包含一个邻居密钥数组,就像这样.
{
nodeIndex: 4
myData: "data"
neighbors: [8,15,16,23,42]
}
Run Code Online (Sandbox Code Playgroud)
要从邻居中查找数据,请使用$ in"运算符":
db.nodes.find({nodeIndex:{$in: [8,15,16,23,42]}});
Run Code Online (Sandbox Code Playgroud)
您可以使用字段选择将结果限制为相关数据.
db.nodes.find({nodeIndex:{$in: [8,15,16,23,42]}}, {myData:1});
Run Code Online (Sandbox Code Playgroud)
MongoDB将在3.4 版本中引入原生图功能,它可用于存储图结构并对其进行分析,尽管根据情况,性能可能不如Neo4j等原生图数据库那么好,但现在判断还为时过早。
检查这些链接以获取更多信息:
| 归档时间: |
|
| 查看次数: |
20422 次 |
| 最近记录: |