以下是使用案例:比如说,我想构建一个笔记应用程序,允许用户在笔记之间或笔记的各个部分之间进行交叉链接。当用户创建交叉链接(边缘)时,他们可以指定链接的类型(边缘类型)。用户还可以输入自定义链接(边缘)类型。
例如,用户写一个关于Celia的笔记和另一个关于巴里的笔记。然后,她用链接类型“HUSBAND”链接来自Celia的Barry笔记。她用链接类型“WIFE”链接来自Barry的Celia笔记。“WIFE”和“HUSBAND”都不是图形数据库的预先存在的模式中的显式边类型。
在我看过的大多数图数据库(例如Neo4j、ArangoDB、Amazon Neptune)中,在节点之间添加一种新的“类型”的边(链接)需要对数据库进行大规模迁移,因为边通常作为集合存储在这些系统中。
除了允许用户动态定义新的集合,是否有任何图形数据库对边的处理方式不同,即不需要我预先定义所有可能的边类型?
2条答案
按热度按时间xghobddn1#
你在这里所描述的听起来像是你如何考虑超图的建模。如果有重要的,使用你的丈夫和妻子的例子在巴里和西莉亚之前声明,那么你可以考虑建模丈夫和妻子作为他们自己的权利的节点,然后当巴里和西莉亚的数据被输入到数据库中,你会把他们附加到这些节点。你可能会改变建模的方式。但是(许多)示例可以是
(Wife)<-[:HAS_REL_TYPE]-(Celia)-[:KNOWS]->(Barry)-[:HAS_REL_TYPE]->(Husband)
uplii1fm2#
免责声明,我是golang typeDB的维护者。
前面的答案是正确的,您的用例需要用隐式逆关系和N元关系来建模超图。据我所知,TypeDB允许您这样做。
https://vaticle.com/typedb
对于您关于避免迁移的具体问题,据我所知,在以下情况下,您不需要迁移任何内容:
显然,非附加性更改(即更改实体、删除属性或更改现有关系)需要某种形式的数据修改或迁移。
如果你更喜欢传统的无模式noSQL DB,Arrango可以为你提供超图和开放模式,但不允许子类型和规则,而是必须将所有规则表述为显式关系。
就个人而言,如果性能,特别是规模性能是最高优先级,Arrango是不可能击败的。如果你需要更大的超极端行星规模,那么只有无限图可以做的工作。
相反,如果功能和特别复杂的领域需求是最重要的,而性能只需要是好的,那么没有什么能击败TypeDB。事实上,一半的大型制药公司使用TypeDB来建模药物发现所需的复杂生物数据。TypeDB支持数十亿的行业,而且,据我所知,很少有图形数据库能够像typeDB那样在降低复杂性的同时提高表达能力。