背景:以下は、本 『Neo4j in Action』で言及されているパフォーマンステストをカバーする本「Graph Databases」からの抜粋です。
グラフの関係は自然にパスを形成します。グラフのクエリまたはトラバースには、次のパスが含まれます。データモデルには基本的にパス指向の性質があるため、パスベースのグラフデータベース操作の大部分は、データのレイアウト方法と高度に連携しており、非常に効率的です。彼らの著書「Neo4j in Action」では、PartnerとVukoticがリレーショナルストアとNeo4jを使用して実験を行っています。
比較は、グラフデータベースがリレーショナルストアよりも接続されたデータの方が大幅に高速であることを示しています。パートナーとVukoticの実験では、最大5つの深さまで、ソーシャルネットワークで友達の友達を見つけようとしています。ランダムに選択された2人の人物がいる場合、それらを結ぶパスは最大で5つの関係です 表2-1に示すように、それぞれが約50人の友達がいる1,000,000人のソーシャルネットワークの場合、結果はグラフデータベースが接続されたデータに最適であることを強く示唆しています。
表2-1。リレーショナルデータベースでの拡張友達の検索とNeo4jでの効率的な検索の比較
Depth RDBMS Execution time (s) Neo4j Execution time (s) Records returned 2 0.016 0.01 ~2500 3 30.267 0.168 ~110,000 4 1543.505 1.359 ~600,000 5 Unfinished 2.132 ~800,000
深さ2(友人同士)では、リレーショナルデータベースとグラフデータベースの両方が十分に機能し、オンラインシステムでの使用を検討できます。Neo4jクエリはリレーショナルクエリの3分の2の時間で実行されますが、エンドユーザーは2つのクエリのミリ秒単位の違いにほとんど気付かないでしょう。ただし、深さ3(友達同士)に到達するまでに、リレーショナルデータベースが適切な時間枠でクエリを処理できなくなっていることは明らかです。完了するまでにかかる30秒は完全に許容できません。オンラインシステムの場合。これとは対照的に、Neo4jの応答時間は比較的フラットなままです。クエリを実行するのに必要な時間はほんの一瞬で、オンラインシステムに十分高速です。
深さ4では、リレーショナルデータベースはレイテンシが損なわれ、オンラインシステムでは実質的に役に立たなくなります。Neo4jのタイミングも少し低下しましたが、ここでの待ち時間は、応答性の高いオンラインシステムで許容できる範囲にあります。最後に、深さ5では、リレーショナルデータベースはクエリを完了するのに時間がかかりすぎます。対照的に、Neo4jは約2秒で結果を返します。深さ5では、ネットワーク全体が私たちの友人です。多くの実際の使用例では、結果とタイミングを整える可能性があります。
質問は:
- これは、ソーシャルネットワークで見つける以外に何をエミュレートするための合理的なテストですか?(実際のソーシャルネットワークには通常、たとえば約50人の友達がいるノードがあることを意味します。「リッチゲットリッチ」モデルはソーシャルネットワークにとってより自然なようですが、間違っている可能性があります。)
- エミュレーションの自然さに関わらず、結果がずれている、または再現できないと考える理由はありますか?