2

現在、Python /フラスコを使用してWebサービスを構築していますが、コアデータ構造は本質的にグラフであるため、neo4jの上にデータレイヤーを構築したいと考えています。その場合、neo4jが提供するさまざまなテクノロジーに少し混乱しています。特に :

  1. 私はもともとpy2neoを介してRESTApiを使用することを計画していましたが、トランザクションの欠如は少し問題です。

  2. 「組み込みデータベース」neo4jは私の場合にはあまり適していないようです。バッチ分析と1回限りの分析を使用していて、データベースをWebサーバーとは別のサーバーに保存する必要がない場合に便利だと思います。

  3. 私はneo4djangoプロジェクトに出くわしましたが、これがトランザクションサポートを提供するかどうかはわかりません(Python用のneo4jのネイティブクライアントがないため)。django自体の外部で使用するのが問題になるかどうか。実際、プロジェクトのドキュメントを見た後、まったく同じ制限があり、トランザクションがないように感じます(ただし、単一の接続タイムアウトでモデルが破損する可能性がある場合、実際のサービスをどのように構築できますか?) 。そのプロジェクトの用途すらわかりません。

誰かが何かをお勧めできますか?私は完全に立ち往生しているように感じます。

ありがとう

4

2 に答える 2

5

その機能はNeo4jRESTAPIインターフェイスでは利用できないため、REST APIクライアントはいずれも(適切な)トランザクションを明示的にサポートできません。サイファークエリやバッチ実行など、サーバー側の単一のアトミックトランザクション内ですべて動作するいくつかの選択肢があります。ただし、クライアントアプリケーションに対する私の一般的なアプローチは、部分的に完全なデータを適切に処理できるコードを構築して、明示的なトランザクション制御の必要性を排除することです。

多くの場合、このアプローチでは一意のインデックスを多用します。これが、py2neo内に多数の「get_or_create」タイプのメソッドを提供した理由の1つです。サイファー自体は非常に強力であり、特にCREATEUNIQUE句を介して一意性機能も提供します。これらを使用すると、書き込みをべき等にすることができ、データが重複することはないという知識で、「複数回実行する」ことを安全に行うことができます。

同意しましたが、このアプローチではトランザクション自体は得られませんが、ほとんどの場合、同等の最終結果が得られます。アプリケーショントランザクションのどこが本当に必要かについて、自分自身に挑戦することは確かに価値があります。

お役に立てれば

ナイジェル

于 2012-11-05T14:53:30.160 に答える
2

Neo4jRESTインターフェースのリソースを介したトランザクションをサポートするneo4j-rest-clientneo4djangoを利用していると思います。batch

構文は、Neo4j PythonemebeddedAPIで使用される構文と非常によく似ています。

>>> n = gdb.nodes.create()

>>> n["age"] = 25

>>> n["place"] = "Houston"

>>> n.properties
{'age': 25, 'place': 'Houston'}

>>> with gdb.transaction():
   ....:         n.delete("age")
   ....:

>>> n.properties
{u'place': u'Houston'}

詳細については、トランザクションに関するneo4j-rest-clientのドキュメントを参照してください。

于 2012-11-05T15:19:38.747 に答える