2016-07-24 15 views
0

Neo4jノード/リレーションシップIDは動的な性質を持ち、ドキュメンテーションやオンラインでさまざまな記事を読んだ後にわかることから、再利用することができます。Neo4j OGMはノード/リレーションシップに対してどのように確実に機能しますか?

したがって、たとえば、たとえば、私が原因私に、別の操作O2は(x)を削除し、O1がブロックされている間、例えば、((y)を作成することが100のIDを持っている(x)上で動作動作O1を、持っています/ O操作)、偶然にも(y)はノードIDが100になることがあります。O1が実行を再開し、(x)と推定されるノードを修正しようとしましたが(実際は(y)ですが、O1は同じノードID)、そのノードのすべての種類の不良データがあります。

特定の数のOGM(すべてがPHPで書かれていますが、他の言語でも同じことがOGMに適用されると思われますが)を扱っていると、私はすべてがIDに頼っていることがわかります。上記のように、しばしば危険な結果をもたらす。

Neo4j OGMはどのようにこれらのケースを処理しますか?または、上記のケースが懸念の理由とならないように(まったく同じ確率、たとえば2つのUUIDが衝突して)「まれ」であるか?

答えて

0

私は主に次の2つのOGMsを知っている:Java用

私が話すことはできません(私はのメンテナの1午前)

  • ​​Rubyの宝石をJavaのライブラリですが、Rubyの側では、RubyのSecureRandom.uuidを使用して、すべてのノードでuuidプロパティを生成します。これは、ノードを一意に識別する方法です。ユーザは、代わりに、自分の「ナチュラル」キー(米国社会保障番号など)を持つことを選択することもできます。 Neo4j UNIQUE制約がある限り、それを使うことができます。

    gem(7.1)の現在の安定版では、制約は自動的に作成されます。次回のメジャーバージョン(8.0)では、ユーザーがこれらの制約を自分で作成する必要があります(これをサポートする新しい移行システムもあります)。しかし、gemはIDプロパティの制約がないとエラーを発生させますモデル。

    また、Neo4j/Neo TechはNeo4jグラフをノードの観点から見るのではなく、関係ではなく、関係に固有のIDを格納しないようにしています。

  • +0

    UUIDなしで作成されたノードはどのように取得しますか? (たとえば、uuidプロパティなしでWebインターフェイスから作成されたもの) – user2064000

    +0

    'Model.find_by_neo_id'を行うことはできますが、一般的にそこにはUUIDがあることを確認したいと思っています。私たちは、UUIDを持たないノードを見つけ出して追加する移行を行っています。また、Rubyの 'SecureRandom.uuid'はRFC 4122に基づいていますので、そこにノードを作成する場合は他の言語で実装するべきです –

    +0

    (また' Model.find_by(neo_id:123) '、' Model.find_by(other_property: –

    関連する問題