neo4j - Neo4J 当你有 3 个主要实体时,最快的结构是什么?
问题描述
假设您有邮政编码、服务和客户。给定邮编和服务,我想尽快找到相应的客户。
选项:
- 客户通过“服务”关系连接到 zips。这似乎是最小的版本,搜索特定的 zip 并且只有一种类型的关系(目标服务)
- 客户连接到服务区,这些服务区指向不同的邮编和服务。在这里,我们搜索所有指向目标服务和目标 zip 的服务区域。
- 每个 Zip 都连接到它们独有的服务节点,然后连接到客户。所以当你搜索时,你去你想要的 zip,去服务,然后任何连接到那里的东西就是你想要的(这感觉就像我可能过度手持 neo4J)
这些不同的版本有不同的性能吗?我无法理解 Neo4J 中搜索格式的理论差异。图 2 是结果同时限制在两侧的示例,对于 1 和 3,您可以在过滤时在图表上线性移动,这有什么不同吗?
谢谢,布赖恩
解决方案
方法 1 有几个主要缺点。所有关于“服务”的数据(我假设是一家提供服务的公司)都必须在每个关联service
关系中复制。这会浪费数据库中的存储空间。此外,如果您想查找特定服务的所有客户(无论邮政编码如何),您必须扫描每个service
关系。
方法 2 为数据模型引入了一个额外的“服务区域”层,这似乎没有提供任何优势,只会使处理您的用例更加复杂和缓慢。
方法 3(我假设每个“服务”都有一个唯一的节点)应该是要走的路。没有数据重复,无需扫描即可找到所需的客户(无论您是从邮政编码开始,还是从服务开始)。
推荐阅读
- firebase - 如何在应用脚本gmail添加项目的请求标头中使用具有身份验证的firebase API
- node.js - 在 Angular /w Electron 中在哪里执行初始化函数?
- r - 错误:处理小插图'QuickStart.Rmd' 诊断失败:没有名为'utf8' 的包
- flutter - 参数类型“Future<>”不能分配给参数类型“”
- kotlin - Kotlin:评估 getter-/setter-methods
- c++ - 在 C++ 中将多级转换为层次继承
- mysql - MySQL 未启动,systemctl status mysql.service”和“journalctl -xe”
- visual-studio-code - 如何在已经在片段中完成标签到新片段?
- javascript - 使 Slick 滑块最后右滑比其他滑块大
- r - 无法在 R 中保存/打开 pdf 文件