12

なぜneo4jにはノードとリレーションシップの容量制限があるのだろうか。ノードとリレーションシップの制限は2^35 1で、これは「通常の」2^32整数よりも「少し」多いです。mysqlなどの一般的なSQLデータベースは、主キーをint(2 ^ 32)またはbigint(2 ^ 64)2として格納します。この決定の利点を説明していただけますか?私の意見では、これはデータベースを選択する際の重要な決定ポイントです。

4

2 に答える 2

12

これは人為的な制限です。公式のETAは聞いたことがありませんが、彼らはそれほど遠くない将来にそれを削除する予定です。

多くの場合、実際にこの制限に達する前に、1台のマシンでハードウェアの制限に遭遇します。

現在のオプションは、グラフを別のマシンに手動でシャーディングすることです。一部のユースケースには理想的ではありませんが、他のケースでは機能します。将来的には、データを自動的にシャーディングする方法があります。ETAもありません。

更新:neo4jストレージの内部についてもう少し学びました。制限が正確に何であるかという理由は、ID番号がいくつかの場所(ノードレコード、関係レコードなど)のポインタとしてディスクに保存されているためです。2の累乗で増やすには、ノードごとに1バイト、リレーションシップごとに1バイトを増やす必要があります。現在、ディスク上でさらにバイトを使用することなく、可能な限りパックされています。このすばらしいブログ投稿で詳細をご覧ください:http: //digitalstain.blogspot.com/2010/10/neo4j-internals-file-storage.html

更新2:
2.1では、これらの制限が現在よりも約1桁高くなると聞いています。

于 2012-10-20T01:44:02.300 に答える
1

neo4j 3.0以降、これらの制約はすべて削除されています。

動的ポインター圧縮により、必要に応じてNeo4jの使用可能なアドレス空間が拡張され、任意のサイズのグラフを保存できるようになります。そうです:340億ノードの制限はもうありません!

詳細については、http://neo4j.com/blog/neo4j-3-0-massive-scale-developer-productivityをご覧ください。

于 2016-05-04T16:58:25.210 に答える