我有一个需要在循环图上执行CRUD操作的问题。现在我知道那里有很多图数据库,但是我有一组特定的用例,这些用例在这些数据库中不被支持(或者至少我不知道它们)。
以下是我的构造:
以下是我可以拥有的功能:
现在,我了解使用关系数据库可以最好地完成所有这些工作,这将确保关系完整无缺且查询简单。但是,当有复杂的图形并且要更新其中的多个图形时,性能会受到影响。
因此,我想知道是否存在一种混合/更好的方法来存储,检索和更新这些图,而这种方法比关系数据库要快得多。
任何想法都会很有帮助。预先感谢!
答案 0 :(得分:1)
我不会淘汰图数据库。您可以使用满足您需求的额外属性/节点/连接来轻松构建缺少的功能。
例如为了创建一个组,您可以创建一个节点,该节点具有一个道具type:Group
,该道具共享相同的groupId
,而所有节点都属于该组。
另一种选择是使组成员与其Group
:Node-belongsToGroup->GroupNode
有更多联系。
在以上任何一种解决方案中,要将Node
/ Group
连接到另一个Group
,仅需要建立到Group
节点的连接。
定义也是如此,例如Node-isOfType->DefinitionNode
。然后updateDefinition
将更新属于该Definition
的所有节点。
基于上述情况,我认为创建如下所示的api很容易:
createGroup
isGroup
addNodesToGroup
createDefinition
updateDefinition
setNodeDefinition
getNodeDefinition
就可扩展性而言,您可以检查OrientDb:Distributed-Architecture / comparison to neo4j
...只有一个服务器可以作为主服务器,因此Neo4j的写吞吐量被限制为单个主服务器的容量。这意味着Neo4j无法扩展写入。
相反,OrientDB支持多主机+分片架构:所有服务器都是主机。吞吐量不受单个服务器的限制。使用OrientDB,全局吞吐量是所有服务器的吞吐量之和。