在图和子图上表示和执行IOs的java
我有一个问题,我需要对循环图执行CRUD操作。现在我知道有很多图形数据库,但我有一组特定的用例,这些用例在这些数据库中不受支持(或者至少我不知道它们)
以下是我的构想:
- 节点:可以有多个源和目标
- 定向边:连接两个节点
- 节点组:多个节点(通过边连接)组成一个组(简单地说,这是一个较小的图形)
- 有向图:由多个节点、节点组和边组成。图可以是循环的李>
以下是我可以拥有的功能:
- 我可以通过定义传入和传出边缘定义简单地创建一个节点李>
- 我可以通过添加节点并用边连接它们来创建一个简单的图形李>
- 我可以执行标准图遍历李>
- 我现在可以将一个图的节点分组,并将其称为节点组,我可以在另一个更大的图中使用此节点组的多个实例(就像节点一样)。这会创建复杂的层次结构李>
- 我可以创建多个图形,这些图形反过来使用上述任何构造李>
- 我可以更改节点和节点组定义,这意味着可以对图形进行结构更改。如果我对节点或节点组定义进行了更改,那么所有图中该节点的所有实例也应该更新李>
现在我知道,所有这些都可以通过关系数据库来实现,关系数据库将确保关系完整,查询简单。但是,当存在复杂的图形并且需要更新其中的多个图形时,性能将受到影响
因此,我想知道是否有一种混合/更好的方法来存储、检索和更新这些图,与关系数据库相比,这种方法会快得多
任何想法都会非常有用。提前谢谢
# 1 楼答案
我不会排斥图形数据库。您可以使用满足您需求的额外属性/节点/连接,轻松构建缺少的功能
例如,为了创建一个组,您可以创建一个节点,其中包含一些属性
type:Group
,这些属性与属于该组的所有节点共享相同的groupId
另一种选择是让组成员与他们的
Group
:Node-belongsToGroup->GroupNode
有一个额外的连接在上述任何解决方案中,要将一个
Node
/Group
连接到另一个Group
,只需要创建一个指向Group
节点的连接定义也是如此,例如
Node-isOfType->DefinitionNode
。然后updateDefinition
将更新属于该Definition
的所有节点基于以上内容,我认为创建如下api很容易:
就可伸缩性而言,您可以检查OrientDb:Distributed-Architecture/comparison to neo4j
api参考: java api/sql ref