2011-03-06 5 views
10

私はMySQLを使用してツールからレポートを保存しています。私はユーザーがデータを照会できる速度と柔軟性に非常に満足しています。このツールには、グラフであるデータもあります。私の質問は、MySQLにグラフを保存するのは良い考えですか?グラフ内のノードおよびエッジの数は数百万であり、クエリは通常グラフトラバーサルです。MySQLにグラフを格納するのは良い考えですか?

+0

一般的に私はいいえと言います。しかし、それはあなたの質問に依存します。 Mysqlには、明らかに、グラフを扱う際に必要となるかもしれない、あるいは必要でない多くのルートの探索が実装されていません。あなたが5-10のような限定された深さでsearhする必要があるなら、私はmysqlがうまくいると思います。しかし、やはり、あなたのグラフを作成したい*クエリ*と動的な変更*のタイプに依存します。 – vbence

+0

グラフを階層として表すことはできますか? – orangepips

+0

グラフの意味はわかりません。いくつかのデータだけを照会してグラフに変換する場合は、mysqlに格納します。あなたの好みだけでなく、プログラミング言語にも依存する、グラフをいくつか、たとえばgifファイルといっしょに保存する場合。デルファイ? Java? Perl? PHP?デスクトップアプリ。ウェブアプリ。?あなたがより多くの情報を提供しない限り、提案をするのは簡単ではありません。 – Weiyan

答えて

5

MySQLは特にグラフデータベースとして作成され最適化されていません。良いグラフデータベースであるNeo4Jを試してみてください。

+1

また、グラフのインデックスを作成することもできます。 –

1

SQLデータベースは一般的にグラフデータをうまく処理しません。問題は、グラフを横断するには、グラフ全体を単一のクエリでメモリにプルしてから操作して変更を保存するか、一度に1つのノードを横断するために大量の結合を実行する必要があることですこれは非常に遅くなります。あなたが見ているスケールのグラフでは、グラフデータベースを使用したり、REDISのようなメモリデータベースを高速キャッシングレイヤーとして使用して、バックグラウンドで永続化する方がよいでしょう。

+1

または、グラフのインデックスを作成することもできます。 –

3

プレーンSQLは、通常、グラフのデータ構造を操作するには不適切です。ただし、インデックスを作成する方法はあります。

たとえば、あなたが頻繁に更新されない場合は、GRIPP indexを使用すると、グラフトラバーサルクエリを非常にうまく処理できます。後者は、ノードの数やリンクの密度に関係なく、親子関係や深度関連の質問に多かれ少なかれ固定された時間で答えることができます。

+1

または、グラフのインデックスを作成することもできます。^_^+1 – Angad

関連する問題