我想知道为什么neo4j在节点和关系上有容量限制。节点和关系的限制是2 ^ 35 1,这是“正常”2 ^ 32整数的“小”位。常见的SQL数据库(例如mysql)将主键存储为int(2 ^ 32)或bigint(2 ^ 64)2。你能解释一下这个决定的好处吗?在我看来,这是选择数据库时的关键决策点。
答案 0 :(得分:12)
这是一个人为限制。他们将在不久的将来将其删除,尽管我没有听过任何正式的ETA。
通常情况下,在实际达到此限制之前,您会在一台计算机上遇到硬件限制。
当前选项是手动将图形分片到不同的计算机。某些用例并不理想,但在其他情况下也适用。在未来,他们将有一种方法自动对数据进行分片 - 也没有ETA。
更新: 我已经了解了更多关于neo4j存储内部的知识。限制是它们的确切原因,是因为id号作为指针存储在磁盘上的几个地方(节点记录,关系记录等)。为了增加2的另一个幂,它们需要每个节点增加1个字节,每个关系增加1个字节 - 它当前已经打包,无需在磁盘上使用更多字节。在这篇精彩的博文中了解更多信息: http://digitalstain.blogspot.com/2010/10/neo4j-internals-file-storage.html
更新2:
我听说在2.1中它们会将这些限制增加到比现在更高的数量级。
答案 1 :(得分:1)
从neo4j 3.0开始,所有这些约束都被删除了。
动态指针压缩可根据需要扩展Neo4j的可用地址空间,从而可以存储任意大小的图形。没错:没有超过340亿个节点限制!
有关详细信息,请访问http://neo4j.com/blog/neo4j-3-0-massive-scale-developer-productivity。