在Neo4j中添加边是否会增加所有查询所需的处理?

在Neo4j中添加边是否会增加所有查询所需的处理?,neo4j,graph-theory,graph-databases,graph-traversal,database-optimization,Neo4j,Graph Theory,Graph Databases,Graph Traversal,Database Optimization,我正在尝试为Neo4j设计一个数据库模式。有几种方法可以做到这一点。我可以将数据作为节点的1个属性或2个作为指向节点的边。第二个选项在如何查询数据方面要强大得多,而且考虑到它不会带来性能缺陷,因此更可取 即使查询中不涉及边,边的数量是否会减慢查询速度?我可以标记这些边,以便引擎可以忽略它们 这里有优化的技术吗 “边缘”与“属性”使用了多少存储空间?我将尝试逐一回答您的问题 即使查询中不涉及边,边的数量是否会减慢查询速度 是,仅当您的查询增加了数量时。使用不同的标签可以加快搜索速度。因此,请确保设

我正在尝试为Neo4j设计一个数据库模式。有几种方法可以做到这一点。我可以将数据作为节点的1个属性或2个作为指向节点的边。第二个选项在如何查询数据方面要强大得多,而且考虑到它不会带来性能缺陷,因此更可取

即使查询中不涉及边,边的数量是否会减慢查询速度?我可以标记这些边,以便引擎可以忽略它们

这里有优化的技术吗


“边缘”与“属性”使用了多少存储空间?

我将尝试逐一回答您的问题

即使查询中不涉及边,边的数量是否会减慢查询速度

是,仅当您的查询增加了数量时。使用不同的标签可以加快搜索速度。因此,请确保设计好模式

这里有优化的技术吗

可以索引属性,但不能索引关系中的属性。因此,根据你的模式进行计划。建议使用属性大于关系的节点。有关详细信息,请参阅本手册

边缘与属性使用了多少存储空间

从neo4j中,我们可以知道它们各自占用的存储空间大小

节点-14B

关系边缘-33B

物业-41B


希望这有帮助

请记住,不同的边类型和方向有助于降低复杂性。如果节点中有100条A类型边和2条B类型边,则仅查询B类型边不会遍历A类型边。类似地,对一个方向的边的查询不会遍历到另一个方向的边。因此,让我们假设在您的示例中,我有一个类型为100 a的db,另一个类型为1000000 a的DBsame架构。对您描述的类型Bas的查询是否会在第二个db中变慢?不,不匹配关系的数量不会影响查询。应该有一个映射机制,只考虑所需类型和方向的关系,不会受到任何数量的不匹配关系的影响。这当然是我正在寻找的答案,我对此表示感谢,除了“应该”这个词。我们不确定Neo4j是如何工作的?我相信,根据关系的数量,从节点评估关系的方式会发生变化。上次我检查的阈值是50。在下面,关系的迭代将在展开之前检查类型和方向。在此基础上,将使用映射。您可以自己检查这一点,创建一个节点并运行两个查询以一次添加100k个关系非常容易。在创建关系之前,使用UNWIND Range 1100000作为索引,然后添加另一个节点中的几个,并查询其中的几个。数据库命中率低,执行时间短。查询本身不会遍历我不感兴趣的边缘。虽然你的回答扩大了我的知识面,但它并没有直接回答这个问题。如果我有将在查询中遍历的边,它们能否以某种方式影响性能?是的。尝试为它们添加唯一的标签。这样就可以提高性能。