2012-10-19 23 views
11

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

+0

neo4j 3.0でこれらの制約をすべて削除しました。私の答え[下記](http://stackoverflow.com/a/37033847/1925109)を参照してください。 – Hassan

答えて

11

人為的な制限です。私は正式なETAを聞いたことがないが、あまりにも遠い未来に彼らはそれを削除するつもりです。

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

現在、グラフを別のマシンに手動で分割するオプションがあります。いくつかのユースケースでは理想的ではありませんが、他のケースでは機能します。将来的には、自動的にデータを破棄する方法もあります。これについてETAは必要ありません。

更新: 私はneo4jストレージの内部についてもう少し詳しく知りました。限界値が正確である理由は、ID番号が複数の場所(ノードレコード、関係レコードなど)のポインタとしてディスクに格納されているためです。これを2の累乗で増やすには、ノードあたり1バイト、リレーション1バイトを増やす必要があります。現在、ディスク上にもっと多くのバイトを使用する必要はありません。この偉大なブログの記事で詳細をご覧ください: http://digitalstain.blogspot.com/2010/10/neo4j-internals-file-storage.html

アップデート2:
私は2.1で、彼らが現在よりも高い大きさの別の順序の周りにこれらの制限を増加することがありますことを聞きました。

0

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

動的ポインタ圧縮は、必要に応じてNeo4jの利用可能なアドレス空間を拡張し、任意のサイズのグラフを格納することを可能にします。それは正しいです:34億ノードの制限はありません!

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

関連する問題