18

Python でグラフ データベースを開発する必要があります (誰かが開発に参加してくれると嬉しいです。既に少しコードを持っていますが、それについて喜んで話し合います)。

私はインターネットで調査を行いました。Java では、neo4jが候補ですが、実際のディスク ストレージについては何も見つかりませんでした。Python には、多くのグラフ データ モデルがあります(PEP 以前のこの提案を参照してください。

ただし、トリプルストアについては知っています。triplestores は基本的に RDF データベースであるため、グラフ データ モデルを RDF にマップして保存することもできますが、この解決法については (主に経験不足のため) 不安です。その一例がセサミです。実際には、クライアント コードが RDF ドキュメントを直接ハッキングしたい場合を除いて、いずれにせよ、インメモリ グラフ表現から RDF 表現に、またはその逆に変換する必要がありますが、これはほとんどありそうにありません。オブジェクトを作成する代わりに、DB タプルを直接処理するようなものです。

現時点で、Python でのグラフ データの保存と検索 ( a la DBMS) の最先端は何ですか? できれば実装に関心のある誰かの助けを借りて、Graph API PEP の提案者と協力して、実装の開発を開始することは理にかなっていますか? これは今後数か月の私の仕事の一部になることに注意してください。したがって、この最終的なプロジェクトへの私の貢献は非常に深刻です;)

編集: directededgeも見つかりましたが、商用製品のようです

4

7 に答える 7

5

私はJavaフレームワークであるJenaAllegrograph(Lisp、Java、Pythonバインディング)の両方を使用しました。イエナにはグラフデータを保存するための姉妹プロジェクトがあり、長い間存在してきました。Allegrographは非常に優れており、無料版があります。これは、インストールが簡単で、無料で、高速で、すぐに稼働できるためです。少しのRDFとSPARQLを学ぶことで得られる力は、しばらくの間価値があるかもしれません。SQLをすでに知っている場合は、すばらしいスタートを切ることができます。SPARQLを使用してグラフをクエリできると、いくつかの大きなメリットが得られます。RDFトリプルへのシリアル化は簡単で、一部のファイル形式は非常に簡単です(たとえばNT)。例を挙げましょう。次のグラフノード-エッジ-ノードIDがあるとします。

1 <- 2 -> 3
3 <- 4 -> 5

これらはすでに主語の述語オブジェクト形式であるため、URI表記をいくつか叩き、トリプルストアにロードし、SPARQLを介して自由にクエリを実行します。ここではNT形式です。

<http://mycompany.com#1> <http://mycompany.com#2> <http://mycompany.com#3> .
<http://mycompany.com#3> <http://mycompany.com#4> <http://mycompany.com#5> .

次に、ノード1から2ホップのすべてのノードをクエリします。

SELECT ?node
WHERE {
    <http://mycompany.com#1> ?p1 ?o1 .
    ?o1 ?p2 ?node .
}

もちろん、これにより< http://mycompany.com#5 >が生成されます。

もう1つの候補は、純粋なJavaで記述されたMulgaraです。あなたはPythonにもっと興味を持っているようですが、最初にAllegrographを見てみるべきだと思います。

于 2010-01-02T04:24:43.980 に答える
3

解決策は、グラフをディスク/データベースに保存した後、グラフをどのように処理するかによって異なります。これは、質問では少し不明確です。ただし、考慮したいことがいくつかあります。

  • rdbmsソリューション(ACIDなど)に期待される機能やプロパティを使用せずにグラフを永続化したい場合は、オブジェクトをフラットファイルにピクルスするだけではどうでしょうか。非常に初歩的ですが、私が言うように、あなたが何を達成したいかによって異なります。
  • ZODBはPython用のオブジェクトデータベースです(私が思うにZopeプロジェクトから派生したものです)。高性能環境で多くの経験を積んだとは言えませんが、いくつかの制限により、Pythonオブジェクトをネイティブに保存できます。
  • RDFを追求したい場合は、グラフからRDF構造への変換に関する懸念の一部を軽減するのに役立つRDF Alchemyプロジェクトがあり、そのスタックの一部としてSesameが含まれていると思います。

興味深いかもしれないPythonサイトに詳細な他の永続化ツールがいくつかありますが、昨年この領域を調査するのにかなりの時間を費やし、最終的に私の要件を満たすネイティブPythonソリューションがないことがわかりました。

私が最も成功したのは、カスタムORMでMySQLを使用することでした。この質問への回答として、関連するリンクをいくつか投稿しました。さらに、RDBMSプロジェクトに貢献したい場合、MySQL用のグラフストレージエンジンについてOpen Queryの誰かに話したとき、彼らはプロジェクトに積極的に参加することに興味を持っているようでした。

申し訳ありませんが、これ以上明確な答えを出すことはできませんが、答えはないと思います...独自の実装の開発を開始する場合は、最新の状態に保つことに関心があります。

于 2009-08-20T07:59:20.653 に答える
2

Serius Cyber​​netics インテリジェント エージェントからのご挨拶です!

いくつかの便利なリンク...

于 2011-02-13T20:23:11.697 に答える
1

Neo4j に関して、既存のPython バインディングに気付きましたか? ディスク ストレージについては、メーリング リストのこのスレッドを参照してください。

Python のグラフデータベースについては、Hypergraph Database Management Systemプロジェクトが最近、Maurice Lingによって SourceForge で開始されました。

于 2009-09-03T09:39:41.453 に答える
1

うーん、CubicWebを見てみるといいかもしれません

于 2009-08-20T09:22:03.887 に答える
0

Redland (http://librdf.org) はおそらくあなたが探しているソリューションです。Python バインディングもあります。

于 2011-07-17T19:56:52.290 に答える