2009-04-04 10 views
4

ソーシャルネットワークデータを操作するアプリケーションを作成していますので、理想的な基礎データ構造は重み付け有向グラフです。グラフ全体をメモリにロードして後でシリアライズしなくても、データを直接操作(および検索)する必要があります。オープンソースグラフ(データ構造のように)データベースエンジンを探しています

これは、標準のSQLデータベースやキー/値ストアを使用してシミュレートできますが、非常に非効率的です(グラフトラバーサルアルゴリズム、たとえば最短パスなど)。

グーグルでは有益な結果が得られなかったので、私は自分自身を書くのが半分ですが、車輪を再構築するよりもむしろ既存のソリューションを使用しています。このプロジェクトは楽しい/個人的な研究のためのものなので、ソフトウェアはオープンソースでなければなりません(Linuxで実行可能)。

したがって、上記の説明に合致するプロジェクトはありますか?

ありがとうございます!

答えて

5

は、Javaを使用している場合は、http://neo4j.org/

+0

他の言語へのバインディングもあります(現在:Ruby、Python、Clojure)。http://neo4j.org/community/languages/を参照してください。 – nawroth

0

グラフをノードの配列として見ることもできます。各ノードがその兄弟のリストを格納する場所。

ノードごとに1つのファイルをグラフに保存するだけで済みます。そのファイルの内容は、それが接続されているノードのリストです(指定されてから指しています)。

次に、必要に応じてノードを読み取ることができます。

これにより、1度に1つのノードだけをメモリに保持しながら、ツリー全体を繰り返し処理することができます。

+0

ええ、それは(あなたが述べたように、自分のデータベースを実装するに相当する)可能性がありますを試すことができます。 TBHディスクからたくさんの小さなファイルを読み込む際のパフォーマンスが心配です(いくつかの測定を最初に行うべきです)。 DirectedEdge(http://is.gd/l5M1)も同様の機能を果たします(別ファイルのベクトル)。 – user87180

+0

私が言及したようにすれば、接続されたノードのプリフェッチのような多くの最適化が可能です。 –

2

ODBMSについてはどうですか? db40にはJavaと.NETの実装があるため、どちらもLinux上で動作します。

+0

私はDBMSもグラフ・トラバース(100万のオブジェクトのページ・ランクを計算すると思う)でオーバーヘッドが多いと感じているので、実際に考慮していません。私はdb4oがLinux用に利用可能であったことを知らなかった。情報のおかげで、おそらく現実的な選択肢かもしれない。 – user87180

関連する問題