我一直在使用couchdb中的图形结构(具有命名关系的属性图)进行建模,并且想知道我将找到的性能瓶颈是什么。
我使用以下原则:
似乎所有这些原则都与CouchDB哲学相矛盾,
有了这个原则,例如,标记一个人就会变成三个文件:
{ _id: '10', type: 'person', 'name': 'John Doe' }
{ _id: '20', type: 'tag', 'name': 'Important' }
{ _id: '30', type: 'link', from: 10, to: 20, name: 'tag' }
我还在名为_design
的{{1}}文档中创建了以下视图:
links
我可以使用这些网址获取文档传入或传出的所有链接:
{
outgoing: {
map: function(doc) {
if (doc.type == 'link') {
emit([doc.from, doc.name], {_id: doc.to});
}
}
},
incoming: {
map: function(doc) {
if (doc.type == 'link') {
emit([doc.to, doc.name], { _id: doc.from });
}
}
}
}
我甚至可以通过这些网址按名称获取所有链接:
http://host/db/_design/links/_view/incoming?startkey=["10"]&endkey=["10",{}]
http://host/db/_design/links/_view/outgoing?startkey=["10"]&endkey=["10",{}]
如果我包含http://host/db/_design/links/_view/incoming?startkey=["10","tag"]&endkey=["10","tag",{}]
http://host/db/_design/links/_view/outgoing?startkey=["10","tag"]&endkey=["10","tag",{}]
参数,我会得到链接引用的文档;传入或传出。到现在为止还挺好。有一个图形结构和一种查询它的方法,虽然是逐个节点的。
这种方法的好处:
include_docs=true
文档,这应该非常简单。link
文档。糟糕的事情,以及我需要你帮助的地方:
回到我的问题:
答案 0 :(得分:0)
您的问题是疯狂而复杂的。 您可能不想要此答案,但是,您是否看过ArangoDB?这是一个具有图形功能的分布式文档存储。