なぜneo4jにはノードとリレーションシップの容量制限があるのだろうか。ノードとリレーションシップの制限は2^35 1で、これは「通常の」2^32整数よりも「少し」多いです。mysqlなどの一般的なSQLデータベースは、主キーをint(2 ^ 32)またはbigint(2 ^ 64)2として格納します。この決定の利点を説明していただけますか?私の意見では、これはデータベースを選択する際の重要な決定ポイントです。
2 に答える
これは人為的な制限です。公式のETAは聞いたことがありませんが、彼らはそれほど遠くない将来にそれを削除する予定です。
多くの場合、実際にこの制限に達する前に、1台のマシンでハードウェアの制限に遭遇します。
現在のオプションは、グラフを別のマシンに手動でシャーディングすることです。一部のユースケースには理想的ではありませんが、他のケースでは機能します。将来的には、データを自動的にシャーディングする方法があります。ETAもありません。
更新:neo4jストレージの内部についてもう少し学びました。制限が正確に何であるかという理由は、ID番号がいくつかの場所(ノードレコード、関係レコードなど)のポインタとしてディスクに保存されているためです。2の累乗で増やすには、ノードごとに1バイト、リレーションシップごとに1バイトを増やす必要があります。現在、ディスク上でさらにバイトを使用することなく、可能な限りパックされています。このすばらしいブログ投稿で詳細をご覧ください:http: //digitalstain.blogspot.com/2010/10/neo4j-internals-file-storage.html
更新2:
2.1では、これらの制限が現在よりも約1桁高くなると聞いています。
neo4j 3.0以降、これらの制約はすべて削除されています。
動的ポインター圧縮により、必要に応じてNeo4jの使用可能なアドレス空間が拡張され、任意のサイズのグラフを保存できるようになります。そうです:340億ノードの制限はもうありません!
詳細については、http://neo4j.com/blog/neo4j-3-0-massive-scale-developer-productivityをご覧ください。