graph - 图数据库设计:我应该添加关系,还是只是遍历
问题描述
我最近开始探索图形数据库和 Neo4J,并希望使用自己的数据。目前我遇到了一些困惑。我创建了一个示例图像来说明我的问题。就效率而言,我想知道哪个选项更好(我想在开始处理更多数量之前的早期立即获得它)。
选项A:仅使用蓝色关系,我可以确定事物是否与Ancient 组相关或属于Ancient 组。这个过程会进行很多次,但不太可能超过 6 代。
选项 B:我实现了红色关系,这样可以更快地确定年轻结构是否属于古代组。
我试图在这种情况下不使用标签,因为我试图将标签用于特定目的以简化我的生活(跨单独网络链接结构),我不确定我是否应该有一个标签来表示已经存在的节点。
总而言之,我想知道在占用更多空间的同时添加全新的关系是否值得,或者遍历查找所有亲戚是否是一项如此简单/便宜的任务,不值得这样做。或者,两种选择都是可行的,这根本不是一个真正的问题。谢谢阅读。
解决方案
我会选择选项 A。Neo4j 的优势之一是它可以非常有效和快速地遍历关系,因此不需要具体化关系(有时,关系会在复杂和/或非常大的图中具体化,但是这不是你的情况)。
不确定为什么不想使用标签?标签用于将节点分组为相同类型的集合,并且还支持索引 - 这使得查找查询的起点更快(索引查找超过完整的数据库扫描)。
推荐阅读
- c - void replaceLetters(char *text, char original, char new_char) 应该改变文本
- typescript - 是否可以存储包含对象的枚举?
- sql - 将 CRC16 MySQL 函数转换为 SQL Server
- angular - 当可观察返回时,我如何发出主题?
- reactjs - 组件样式是否可以限定范围而不是内联以防止同一页面上的多个 React 应用程序覆盖?
- javascript - JS textcontent 仅设置为字符串的一部分
- wordpress - 处理订单时以编程方式生成 WC 优惠券 - 优惠券代码错误
- opencv - 使用opencv在图像中绘制我的边界框,但bbox从不显示
- javascript - 反应 useContext 失去状态
- vue.js - Vuelidate & Tailwind:为什么我总是看到无效错误?