3

私はneo4jから始めて、レコメンデーションエンジンの基盤となる優れたデータベースになるかどうかを評価しています。読み取りおよび書き込み操作中にエンティティで取得されたロックに関するドキュメントがあるかどうか疑問に思いました。

たとえば、ノードNが関係R1とR2を介してノードN1とN2にそれぞれ関連している場合、関係R1が作成または変更されている場合、N、N1、N2、またはR2を使用する操作(関係の作成/変更またはトラバーサル)は発生しますか?ブロック ?直感的には、書き込まれるのはR1だけであり、ロックされる必要があるのはR1だけなので、いいえと思います。ただし、特に双方向トラバーサルがすべての関係に提供されているため(おそらくNとN1がロックされるのでしょうか?)、基礎となる実装にも依存すると思います。誰かが私にこれに関するいくつかの公式文書を教えてくれるといいですね。

そのようなロックが実際に発生した場合、問題を解決するために私が考えることができる1つの方法は、各ノードを各関係の目的で子ノードに解決し、それぞれがルートエンティティに接続することです。(たとえば、ユーザーソーシャルユーザー、ユーザー製品ユーザーなど)

これにより、ノードあたりの関係の数が減り、ルートノードを解決して、書き込みが重い子と読み取りが重い子を作成し、特定のサブグラフをすばやく取得できるようになると思います。私が見ることができる唯一の欠点は、ノードと関係の総数がn倍になることです(私のdbサイズはn = 4と比較的小さいので、問題はありません)。これらの結論が正しいかどうか、もしそうなら、パフォーマンスを改善し、ロックの数を減らすのに役立つかどうかについての入力をいただければ幸いです。

4

1 に答える 1

0

R1(NとN1の間)が作成される最初のシナリオでは、NとN1は書き込みロックでロックされます。つまり、NまたはN1への他の書き込みはブロックされますが、読み取りは行われません(以前に手動で読み取りロックが発行されていない場合)読む)。

R1がなんらかの方法で変更された(プロパティが設定された)シナリオでは、R1のみがロックされます。

競合に関する実際の問題を観察した場合、エンティティをいくつかの特定目的のサブノードに分割することによるソリューションは、かなり良いものです。ほとんどの場合、これが使用されているのを見て、関係タイプが分割されています...密に接続されたノードの処理を改善するための計画された機能によっておそらく解決されるでしょう。この機能は、おそらくそれと非常によく似た効果をもたらします。

于 2013-01-01T19:15:33.807 に答える