是否有一个图形数据库允许添加任意边类型而不需要大规模迁移?

Is there a graph database which allows for arbitrary edge types to be added without requiring a wholesale migration?

这是用例:假设我想构建一个笔记应用程序,允许用户在笔记或部分笔记之间交叉link。当用户创建交叉link(边)时,他们可以指定link(边类型)的类型。用户还可以输入自定义 link(边缘)类型。

For example, a user writes one note about Celia and another about Barry. She then links the Barry note from Celia, with a link type "HUSBAND". She links the Celia note from Barry, with a link type "WIFE". Neither "WIFE" nor "HUSBAND" were explicit edge types in the pre-existing schema of the graph database.

在我看过的大多数图形数据库(例如 Neo4j、ArangoDB、Amazon Neptune)中,在节点之间添加新的 'type' 边 (link) 需要对数据库进行大规模迁移,因为边缘通常在这些系统中存储为集合。

是否允许用户动态定义新集合,是否有图形数据库以不同方式处理边,即不需要我预先定义所有可能的边类型?

您在这里描述的内容听起来与您对超图建模的想法相似。如果使用您在 Barry 和 Celia 之前声明的 HUSBAND 和 WIFE 示例很重要,那么您可能会考虑将 HUSBAND 和 WIFE 建模为自己的节点,然后当 Barry 和 Celia 的数据输入数据库时​​,您会将它们附加到那些节点。您如何对此进行建模会有所不同,但(许多)示例可能是 (Wife)<-[:HAS_REL_TYPE]-(Celia)-[:KNOWS]->(Barry)-[:HAS_REL_TYPE]->(Husband)

免责声明,我是 golang typeDB 维护者。

前面的答案是正确的,您的用例需要对具有隐式逆关系和 N-ary 关系的超图进行建模。据我所知,TypeDB 可以让你做到这一点。

https://vaticle.com/typedb

关于避免迁移的具体问题,据我了解 TypeDB,如果满足以下条件,则无需迁移任何内容:

  • 你们的新关系可以说是有规律可循。例如:如果城市在国家和国家在大陆,那么城市在大陆。 TypeDB 在查询期间应用这些规则,这意味着您可以查询亚洲的所有城市并获得正确的列表。此外,TypeDB 支持类型层次结构,即 Capital 是 city 的子类型,因此您可以将两者结合起来,即查询欧洲的所有首都,并得到正确的响应。可以用规则表达的内容和可以在模式后自由添加的规则令人印象深刻。

  • 您的架构更新仅是附加的,即您模拟婚姻、离婚,两者都带有位置,并且在稍后的某个时候您想要添加蜜月和 link 它到位置。您可以为实体蜜月这样做,但必须在架构更改后更新现有数据。规则是你的朋友,这意味着你制定规则而不是写关系。

显然,非附加更改(即更改实体、删除属性或更改现有关系)需要某种形式的数据修改或迁移。

如果您更喜欢更传统的无模式 noSQL DB,那么 Arrango 可以为您提供超图和开放模式,但不允许子类型化和规则。相反,您必须将所有规则表述为显式关系。

就个人而言,如果性能,尤其是大规模性能是最重要的,那么 Arrango 是无可匹敌的。如果你需要更大的极端行星规模,那么只有无限图可以胜任。

相反,如果功能,尤其是复杂的领域要求是最重要的,而性能只需要好,那么没有什么比 TypeDB 更好的了。事实上,一半的大型制药公司使用 TypeDB 来模拟药物发现所需的复杂生物数据。 TypeDB 催生了一个价值数十亿的行业,据我所知,很少有图数据库能够像 typeDB 那样轻松地降低复杂性,同时提高表现力。