私はneo4jから始めて、レコメンデーションエンジンの基盤となる優れたデータベースになるかどうかを評価しています。読み取りおよび書き込み操作中にエンティティで取得されたロックに関するドキュメントがあるかどうか疑問に思いました。
たとえば、ノードNが関係R1とR2を介してノードN1とN2にそれぞれ関連している場合、関係R1が作成または変更されている場合、N、N1、N2、またはR2を使用する操作(関係の作成/変更またはトラバーサル)は発生しますか?ブロック ?直感的には、書き込まれるのはR1だけであり、ロックされる必要があるのはR1だけなので、いいえと思います。ただし、特に双方向トラバーサルがすべての関係に提供されているため(おそらくNとN1がロックされるのでしょうか?)、基礎となる実装にも依存すると思います。誰かが私にこれに関するいくつかの公式文書を教えてくれるといいですね。
そのようなロックが実際に発生した場合、問題を解決するために私が考えることができる1つの方法は、各ノードを各関係の目的で子ノードに解決し、それぞれがルートエンティティに接続することです。(たとえば、ユーザーはソーシャルユーザー、ユーザーは製品ユーザーなど)
これにより、ノードあたりの関係の数が減り、ルートノードを解決して、書き込みが重い子と読み取りが重い子を作成し、特定のサブグラフをすばやく取得できるようになると思います。私が見ることができる唯一の欠点は、ノードと関係の総数がn倍になることです(私のdbサイズはn = 4と比較的小さいので、問題はありません)。これらの結論が正しいかどうか、もしそうなら、パフォーマンスを改善し、ロックの数を減らすのに役立つかどうかについての入力をいただければ幸いです。