4

家系図のためのグラフデータベースの実用的な使用方法を教えてもらえますか? 私はneo4jを学びたいと思っていて、私はpythonを使っているので、グラフdbを学ぶために系図グラフdbを作ろうとしていました。エミュレートして学習する例 (任意のグラフ データベース、任意の言語) を検索しましたが、あまり見つからないことに驚きました。

注: リレーショナル データベースとは異なる構造を持つグラフ データベースを意味します。http://en.m.wikipedia.org/wiki/Graph_databaseを参照してください。

家系図の例のスキーマを探しています。

4

2 に答える 2

4

Graphdb の使い方を学びたい場合は、ソフトウェアを使用する必要はありません。鉛筆と紙と脳で十分です。デザインを考え出すために心に留めておく必要があることは次のとおりです。

  • グラフとは: 頂点と辺
  • graphdb データ構造に固有のもの: 頂点とエッジは python のような dict に関連付けられています。
  • 私が直面している問題を解決するためにgraphdbに必要な情報は何ですか。グラフに対して実行できるようにするすべてのクエリをリストします。

下の図には、設計の基礎となるグラフが表示されます。

系図クエリを実行するために使用できるネイキッド グラフ

すべてのノードに名前、生年月日など、一意の識別子があることを想像する必要があります。

これは、2 つの切り離された家族を表しています。左は 2 人の子供がいる家族、右は 3 人の子供がいる家族です。

上記のグラフを使用すると、次のように計算できます。

  • Xの親は誰?
  • 一番大きな家族の父親の名前は?

また、親と子のみを持つ 2 つのファミリしかないため、祖父母または孫が表されていないため、実際には次のクエリも計算できることを理解できない場合があります。

  • Xを先祖に持つ人で今も生きている人は?

Python を試してみたい場合は、簡単なセットアップから始めて、いくつかの選択肢があります。

純粋なパイソン:

  • dictを継承したVertexクラスとEdgeクラスを作成します。
  • 実際のデータなどから Python コードで家系図を作成します。
  • クエリを試してください。

Python と BerkleyDB

  • 免責事項:これは私のプロジェクトです
  • グラフがデータベースに保存されることを除いて、純粋な Python バージョンと同じです。API は neo4j python バインディングに似ています。

これらは他のソリューションですが、ターゲット アプリケーション (Web やデスクトップなど) に関するコンテキストがなければ、すべてをリストすることはできません。これらは、neo4j Web サイトの役立つ情報です。

そうは言っても、最良のソリューションには neo4j が含まれる可能性がありますが、複数のデータベースを簡単に切り替えてユースケースのパフォーマンスの観点から最適なデータベースを見つけたい場合は、ネットワーク アプリケーション用のRexsterまたはその他のアプリケーション用のBlueprintsが必要です。neo4j サーバーを直接使用する唯一の理由は、暗号クエリ言語を使用できるようにするためです。

家系図のウェブアプリを作成し、そこからビジネスを構築する必要がある場合は、私が構築したソフトウェアを使用します。

それらはそのままでは生産の準備ができていません。しかし、それは私がすることです。

于 2014-03-23T15:24:29.033 に答える
2

サーバーなしで (および JVM なしで)高速なデータベースを使用する場合。真新しいSparksee (以前の Dex) python バインディングを試すことをお勧めします。ただし、未加工の API は移植できません。ただし、パフォーマンスは桁違いに高速です。

2 番目のオプションは、REST API を介して Neo4j 上で実行される Bulbs を使用することです。これは、任意の Rexsters サーバーもサポートしますクエリ言語は Gremlin です (Cypher も動作します)。良い点は、必要に応じて別のバックエンドに切り替えることができることです。

DB スキームに関しては、少なくとも 1 つのノードと 1 つのエッジがあります。

1 ノード: インデックス付きフィールドである PERSON (名前、誕生、死亡)。

CHILD_OF または PARENT_OF という名前の PERSON から PERSON への 1 つの有向制限エッジ。

SIBLINGS、MARRIED_TO などのノード間にさらにエッジを追加できます。

于 2014-03-23T15:39:44.113 に答える