質問

私はアプリケーションと多くの類似品(百万円)は、たいと思いることによっては、MySQLデータベースがしたいと思っていくの統計および検索の具体的な数値は特定の列あります。

しかし同時に、店舗の関係のすべての項目に関連する多くの接続のバイナリ-ツリー構造(他閉鎖)との関係のデータベースとなるような構造ていきたいと思いますので店舗のすべての関係Neo4jをして結果が良かったために、このようなデータです。

マイプランですべてのデータ以外の関係は、MySQLデータベースとの関係 item_id のNeo4jデータベースです。りたいときにルックアップツリーでは、まず検索のNeo4jを item_id:s、そして検索を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のクエリを実行。

役に立ちましたか?

解決

このには、いくつか考えます:

私は、グラフ内の各ノードの属性を含めるようにのNeo4jのドメインモデルをモデル化しようとするだろう。 2つの異なるデータストアにデータを分離することによって、あなたはあなたがしたいかもしれないいくつかの操作が制限される場合があります。

私はそれはあなたがあなたのグラフでやっているだろう何に降りてくると思います。例えば、あなたは、その属性が特定のノードに接続されたすべてのノードを検索する場合(つまり名前、...何歳)あなたが最初に行く、あなたのMySQLデータベースに正しいノードIDを検索し、しなければならない一定の値であり、 Neo4j?これはちょうど遅いようだとあなたがのNeo4jにこのすべてを行うことができたときに過度に複雑。そこで質問です:グラフを通過するときには、ノードの属性が必要になりますか?

あなたのデータを変更するか、またはそれが静的なのですか? 、2つの独立したデータストアを持つことによって、問題を複雑になります。

Neo4jですべてを行うよりも容易になるかもしれませんMySQLデータベースを使用して統計を生成し、コードが定義された基準を満たすすべてのノードを検索し、グラフを横断する必要なくなり

は、過度に難しいことではありません。どのようなこれらの統計情報であることはあなたのソリューションを駆動する必要があります。

私は、ノードIDを選択するために、MySQLのクエリのパフォーマンスについてコメントすることはできません。私はそれはあなたが選択してインデックス戦略が必要になりますどのように多くのノードに降りてくると思います。それはかかわらず、グラフを横断することになると私は物事のパフォーマンスの側面については同意します。

これはちょうどこの上で良い記事です:のMySQLのNeo4j対大規模グラフトラバーサルの上であり、この場合には、彼らは大きな言うとき、彼らは唯一の百万頂点/ノードと400万人の縁を意味します。それも特に密グラフではなかったので。

他のヒント

リレーショナルデータベース対応できるグラフ構造です。一部にも対応可能としては緩やかな優雅にして優雅にしてリレーショナルデータベースを取得す!).

の総合グラフの取り扱いに関係することで、データベースの 再帰的共通のテーブル式 (RCTE、基本的にはきを繰(再帰的になにもかかわらず、名称を拡ク上の行のセットと組み合わせることによりクエリーを選定するユーザーの行のセットとクエリを定義する近隣諸国の行を選択です。構文は少し無骨ですが、一般にあります。

RCTEsサポートされPostgreSQL、Firebird、SQLサーバーでDB2.Oracleは異なるものと同等の構築;だったので、最近のバージョン支援の適切なRCTEs.MySQLはRCTEs.でない場合添い遂げるMySQLいう考えではPostgreSQLを利用は、基本的には、より良いデータベースです。

しかし、そのような支援の一般のグラフです。その場合、特定のオプションをオープンします。

ひとつは、クラシックなmindbending 入れ子のセット.

簡単な一つは、店内のワンデーパスが付いた各列この文字列を表す列のツリーの物件のパスのノードの接頭辞の他subnode、き非常に効率的な各種についてのお問い合わせへの祖先("はノードの子ノードB?", "何をノード、ノードBの最小共通祖?", ます。たとえば、構築のパスに行を歩くツリーのルートは、接合のIdの列た、スラッシュ.これは単純な構築がな注意を維持すれば並べ替えます。パスコラム制限することができるクエリを与えられたツリーを追加するだけで、 and path like '23/%', では、 23 ルーツのIDです。

では、グラフのデータベースは、店舗やクエのグラフデータだけではないオプションは、私はあなたが体重のメリット利用に対する優位性を有するすべてのデータを単一のデータベースです。

私はこの上のバイナリオタクとほとんどだけど、バリエーションを追加したいと思います。あなたはのNeo4jでライブデータを保存し、あなたが報告/統計のために必要なデータを抽出し、MySQLのに置くことができます。それはあなたのニーズに合った場合に検索のために私はのNeo4j-のLucene統合するで行くと思います。

あなたには使用してクエリを向上させることができます

SELECT *
FROM items
WHERE item_id IN (45, 345435, 343, 78, 4522, 676, 443, 4255, 4345)

リレーショナルデータベースはツリー構造を保存する時に悪いことも、完全に真実ではありません。確かにMySQLはそれが簡単になるだろういくつかの機能が欠けているが、ほとんどの他のデータベースには、それをよくサポートしています。 OracleはCONNECT BYを持っています。主流のRDBMSのほとんどは、再帰クエリのいくつかのフォームを持っている - MySQLは顕著な例外であること。おそらく、あなたは、PostgreSQLを見て、それはあなたのニーズを満たしているかどうかを見ることができました?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top