gpt4 book ai didi

java - 在图和子图上表示和执行 IO

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:35:23 28 4
gpt4 key购买 nike

我有一个问题,我需要对循环图执行 CRUD 操作。现在我知道那里有很多图形数据库,但我有一组特定的用例,这些用例在这些数据库中不受支持(或者至少我不知道它们)。

以下是我的构造:

  • 节点:可以有多个源和目标
  • 有向边:连接两个节点
  • 节点组:多个节点(有边相连)组成一个组(简单来说就是一个更小的图)
  • 有向图:由多个节点、节点组和边组成。该图可以是循环的。

以下是我可以拥有的功能:

  • 我可以通过定义传入和传出边定义来简单地创建一个节点。
  • 我可以通过添加节点并用边连接它们来创建一个简单的图。
  • 我可以执行标准的图形遍历。
  • 我现在可以对图的节点进行分组并将其称为节点组,我可以在其中使用此节点组的多个实例(就像节点一样)另一个更大的图表。这会创建复杂的层次结构。
  • 我可以创建多个图表,这些图表依次使用上述任何结构。
  • 我可以更改节点和节点组定义,这意味着可以对图形进行结构更改。如果我更改节点或节点组定义,则所有图中该节点的所有实例也应更新。

现在我明白了所有这些都可以通过关系数据库来最好地完成,这将确保关系完好无损并且查询简单。但是当有复杂的图形并且要更新多个图形时,性能会受到影响。

所以,我想知道是否有一种混合/更好的方法来存储、检索和更新这些图形,与关系数据库相比速度要快得多。

任何想法都会很有帮助。提前致谢!

最佳答案

我不会排斥图形数据库。您可以使用满足您需求的额外属性/节点/连接轻松地自行构建缺少的功能。

例如为了创建一个组,您可以使用一些属性 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

...only one server can be the master, so the Neo4j write throughput is limited to the capacity of the single Master server. This means that Neo4j isn’t able to scale on writes.

OrientDB, instead, supports a Multi-Master + Sharded architecture: all the servers are masters. The throughput is not limited by a single server. With OrientDB, the global throughput is the sum of the throughput of all the servers.

API 引用: java api/sql ref

关于java - 在图和子图上表示和执行 IO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51400172/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com