2010-11-22 15 views
1

背景:SQLグラフ効率

私は有向グラフを表すためにSQLite3を使用しています。

シナリオ1:ノードとアソシエーション

ノードテーブルは、特定のノードに関連するノードID及びデータを保持する:

Iは、2つのテーブルを持っています。

アソシエーションテーブルには、親ノードフィールドと子ノードフィールド(および主キーID)が保持されます。

シナリオ2

私は1つのテーブルを持っている:ノード

ノードテーブルは、ノードID、関連するノードデータ、及び保持するノード協会カラム(約100)のトンを保持しています別のノードのID

質問:

、より効率的でしょうか?あるグラフのサイズが他のグラフのサイズよりも良くなるのですか?これらの2つのオプションのスケーラビリティの経験

最もよくある質問は、特定のノードが接続されているすべてのノードを決定することです。

答えて

3

は、シナリオ1

シナリオ2の基本的な正規化ガイドラインに違反して移動して、あなたが100の以上の関連付けをサポートする必要があるときは、すぐに壁に頭を強打されます。また、関係を分析するために適切なSQLを実行することも難しくなります。

クイック!どのように多くのノードが10と20の会合を持っていますか?このクエリはシナリオ2の悪夢です。シナリオ1で簡単です。