graph 違い Neo4Jに複数のグラフを保存する




sts eclipse 違い (2)

MySQLテーブル(contact_id、other_contact_id、strength、recorded_at)に関係情報を格納するアプリケーションがあります。 私がする必要があるのは、連絡先の関係が誰であるかを表示したり、2人の連絡先の相互連絡先リストを生成したりすることだけで十分です。

しかし、今では、「2011年1月に3以上の強さの双方向接続の総数は何ですか」または(各連絡先がグループの一部であると仮定して)「どのグループが最も多くの接続数を持つか」といった統計を生成する必要があります他のグループに

私はすぐにこれらの統計情報を生成するためのSQLが実用的ではありませんでした。

だから私は任意の日付のためにそれをメモリにグラフを生成するスクリプトを書いた。 私はその後、そのグラフに対して必要な統計を実行することができました。 グラフパーツを生成することを除いて、理解しやすく、一般的にははるかに性能が高い。

私の次の考えは、これらのグラフをキャッシュして、新しい統計を実行する必要があるときはいつでも呼び出すことができるようにすることでした(または、後のグラフを生成します:例えば今日のグラフについては昨日のグラフをとり、 私はmemcachedを試してみました。これはグラフが1 MBを超えるまでうまくいった。

だから、私はNeo4Jのようなグラフデータベースを使うことを考えています。

ただ問題は、私はただ一つのグラフしか持っていません。 それとも、私はそうしますが、それは時間の経過と共に変化するものであり、異なる基準時間でそれを照会できる必要があります。

私も:

  • 複数のグラフをNeo4Jに保存し、それらを別々にrertrieve / interactすることができますか? 私はその後、各日付ごとに別々のソーシャルグラフを作成して保存します。

または

  • 5月1日の前に作成された2つのノーズの間の最新のエッジに従うだけです(そして、すべてのエッジが有効な場合は、 5月1日以降に作成されたノードは接続されません)。

私はデータベースをグラフ化するのがかなり新しいので、どんなヘルプ/ポインタ/ヒントも感謝します。


一番簡単な解決策ではありませんが(私はあなたが1台のマシンでしか動作しないと仮定しています)、実際にグラフを分離したいのであれば、グラフはディレクトリであることを覚えておく必要があります。

次に、動的ローダークラスを作成します。動的ローダークラスは、必要なデータベースのパスを取得し、クエリ用にメモリにロードし、回答を得た後に閉じます。 また、プロキシサーバーを構成し、ローダーに2つのパラメーターを送信することもできます。クエリ(この場合はCypherクエリと見なします)とクエリするデータベースのパスです。

これは、リアルタイムのクエリがたくさんある場合には適切ではありません。 しかし、単にデータセットを分析して保存し、分析するだけであれば、ニーズに確実に答えることができます。


今では、1つのグラフデータベースを1つのNeo4jインスタンスに格納できますが、この1つのgraphdbには、好きなだけ多くの異なるサブグラフを含めることができます。 グローバル操作(インデックスクエリなど)を行うときは、そのことを念頭に置いておく必要がありますが、タイムスタンプ付きプロパティを含む複合クエリを実行して結果を制限することもできます。

これを行う1つの方法は、与えられた日付のグラフの構造を表現するために時間情報をエッジに追加すると述べたので、当時のグラフの構造をトラバースすることができます。

参照ノードはNeo4jでは異なる意味を持ちます。

1日にカテゴリノードを使用すること(およびそれらをリンクすること、さらにそれらを高レベルの時間節約のために集約すること)は、ノードを索引付けされたプロパティよりも分類するグラフ化方法です。 (これらは、トラバーサルとグラフクエリに簡単に含めることができるイングラフのインデックスです。

異なる一時的な構造にのみ関心がある限り、ノードを複製する必要はありません。 あなたのノードが異なっている場合(例えば、プロパティの変更、それらを複製して異なるサブグラフを効果的に作成する場合)、または変更だけを含む各ノード上の履歴ノードの接続リストを作成することもできます。 。

あなたのドメインは、グラフデータベースにとって非常に適しています。 より詳細な質問がある場合は、Neo4j メーリングリストに自由に参加してください