MySQLとNeo4jを一緒に使用するのは良い考えでしょうか? 質問する

MySQLとNeo4jを一緒に使用するのは良い考えでしょうか? 質問する

類似したアイテムが多数(数百万)あるアプリケーションを作成し、それらを MySQL データベースに保存したいと考えています。これは、大量の統計情報を取得して、特定の列の特定の値を検索したいためです。

しかし同時に、多くの接続されたバイナリツリーのような構造(推移閉包)で関連するすべてのアイテム間の関係を保存しますが、関係データベースはそのような構造には適していないため、この種のデータに対して優れたパフォーマンスを発揮する Neo4j にすべての関係を保存したいと思います。

私の計画は、リレーションを除くすべてのデータを MySQL データベースに格納し、item_idリレーションを含むすべてのデータを Neo4j データベースに格納することです。ツリーを検索するときは、まずitem_idツリー内のすべての : を Neo4j で検索し、次に次のようなクエリで指定されたすべての項目を MySQL データベースで検索します。

SELECT * FROM items WHERE item_id = 45 OR item_id = 345435 OR item_id = 343 OR item_id = 78 OR item_id = 4522 OR item_id = 676 OR item_id = 443 OR item_id = 4255 OR item_id = 4345

これは良い考えでしょうか、それとも私が大きく間違っているのでしょうか?これまでグラフ データベースを使用したことがありません。私の問題に対するより良いアプローチはありますか? この場合、MySQL クエリはどのように機能しますか?

ベストアンサー1

これについていくつか考えてみましょう:

Neo4j ドメイン モデルをモデル化して、グラフ内の各ノードの属性を含めるようにします。データを 2 つの異なるデータ ストアに分割すると、実行したい操作が制限される可能性があります。

結局のところ、グラフで何をするかということにかかっていると思います。たとえば、属性 (名前、年齢など) が特定の値である特定のノードに接続されているすべてのノードを検索する場合、最初に MySQL データベースで正しいノード ID を見つけてから Neo4j に移動する必要がありますか? Neo4j でこれらすべてを実行できる場合、これは時間がかかり、複雑すぎるように思えます。そこで、グラフをトラバースするときにノードの属性が必要になるかどうかが問題になります。

データは変更されますか、それとも静的ですか? 2 つの別々のデータ ストアを持つことで、問題は複雑になります。

MySQL データベースを使用して統計を生成するのは、すべてを Neo4j で行うよりも簡単かもしれませんが、定義された基準を満たすすべてのノードを見つけるためにグラフをトラバースするために必要なコードはそれほど難しくありません。これらの統計が何であるかによって、ソリューションが左右されるはずです。

ノード ID を選択するための MySQL クエリのパフォーマンスについてはコメントできません。それは、選択する必要があるノードの数とインデックス作成戦略によって決まると思います。ただし、グラフをトラバースする場合のパフォーマンス面については同意します。

これはまさにこれに関する良い記事です:大規模グラフトラバーサルにおける MySQL と Neo4j の比較この場合、大規模というのは、100 万の頂点/ノードと 400 万のエッジのみを意味します。つまり、特に密度の高いグラフではありませんでした。

おすすめ記事