4

各ノードが無向の方法で別のノードにリンクする何百万ものノードのグラフを保存したいと考えています (ポイント A から B、自動的に B は A をポイントします)。可能な解決策として Neo4j、OrientDB を検討しましたが、それらは有向グラフに向けられているようです。

他の NoSQL DB (Redis、CouchDB、MongoDB など) のどれがこのようなものに最適で、どのように実装できるか教えていただけますか? プロパティのない (リンクされた要素のみを提供する) 幅優先クエリを 2 つの深さレベルで作成したい (A<->B、B<->C、C<->D を持ち、A をクエリすると B が返されるはず)および C で、D ではありません)。

4

2 に答える 2

5

OrientDBにはノード数の制限はありません。さらに、デフォルトモデルは双方向です。適用されるライセンスはApache2であるため、商用目的でも無料で使用できます。

GraphDBは、http ://code.google.com/p/orient/wiki/GraphDatabaseに記載されています。基本的に、ネイティブAPIまたはブループリントの実装を使用できます。ネイティブAPIは、グラフ用の特別な演算子を使用してSQL言語を進化させたものです。例:

SELECT FROM Account WHERE friends TRAVERSE(1,7)(address.city.country.name ='ニュージーランド')

つまり、ニュージーランドに住んでいるそのような友人とのすべてのアカウントを私に与えてください。友達は7レベルの深さまで連れて行かれます。

2つ目は、Gremlin言語などの完全なブループリントスタックを使用して、超複雑なクエリを作成できるようにします。

于 2010-10-01T14:14:35.060 に答える
4

Neo4jは常にリレーションシップ/エッジを有向として保存しますが、トラバース/クエリを実行するときに、 Direction.BOTHを使用するか、場合によっては方向をまったく定義しないことで、グラフを無向として簡単に扱うことができます。(この方法では、両方向をカバーする「二重」エッジは必要ありません。単に方向を無視します。また、エッジを「後方」にトラバースするときにパフォーマンスが低下することはありません。)

100 万の「プリミティブ」制限は、かなり前から削除されていました。コードがオープン ソースの場合、任意のサイズの DB にコミュニティ バージョンを使用できます。他のケースでは、1 つの無料の代替を含む商用バージョンがあります。

于 2010-10-01T13:19:58.400 に答える