私はオブジェクトを持っており、私はそれに加えられたすべての変更の履歴を保持する必要があります。 neo4jを使用してこれを実装するにはどうすればよいですか?neo4jでリビジョンを実装するにはどうすればよいですか?
答えて
RDBMSの場合と同様に、ドメインとデータクエリの要件によって異なります。
アプリケーションでは、オブジェクトのすべてのバージョンに通常アクセスする必要がありますか、通常は最新のバージョンにアクセスする必要がありますか?この例は、Wikipediaのページです。
ここ(pages)-[:PAGE]->(V3)-[:PREV]->(V2)-[:PREV]->(V1)
^ ^
| |
category current
node version of page
、唯一の現在のバージョンは、主要構造の一部を形成するために見ることができますが、可能性があります。例のように、我々は次のように私たちは、その後、これをモデル化でき、バージョン3の上にあるページを持っているとしましょうすべてのバージョンがその構造の一部を形成できるようにしたい。このケースでは、バージョンを示すために、リレーションシップ・プロパティを使用すると、すべてのページのバージョンを持っているカテゴリノードからリンクできます:単純にバージョンを指定することで、ここで
(V1)
^
|
[:PAGE(v=1)]
|
(pages)-[:PAGE(v=2)]->(V2)
|
[:PAGE(v=3)]
|
v
(V3)
は、あなたがすぐにページの特定のバージョンに行き来することができますあなたは興味があります。
3番目のオプションは、すべての古いバージョンをメインの構造から完全に分離したい場合があります。このためには、複数のカテゴリノードを使用できます.1つは(current_pages)
、もう1つは(old_pages)
です。各ページが新しいバージョンに取って代わられると、それは前のカテゴリからリンクされず、後者にリンクされます。これは、古いバージョンを別のデータベースインスタンスに移すことさえ可能な、より多くの「アーカイブ」タイプのシステムを形成します。
あなたはこれら3つのオプションがありますが、それ以上のことは考えていません! Neo4jは、このようなデザインに大きな柔軟性をもたらし、「正しい」答えはまったくありません。しかし、これらのどれにも触発されていない場合は、ドメインに関する情報を少しだけ投稿して、ニーズに合わせて答えを調整してください。
乾杯、 たNiGe
:
(pages)-[:VERSION]->(V1)-[:VERSION]->(V2)-[:VERSION]->(V3)
^ ^
| |
category current
node version of page
利点:あなたは新しいバージョンを作成するときに、あなただけのチェーンの最後にそれを追加していません(ページ)と現在のバージョンの間に "挿入"する必要があります。
欠点:チェーンを再構築しない限り、古いバージョンを捨てることはできません。しかし、これは頻繁な操作ではないでしょう。
- 1. スイングでフェードボタンエフェクトを実装するにはどうすればよいですか?
- 2. Xamarinでドキュメントプロバイダエクステンションを実装するにはどうすればよいですか?
- 3. Jadeでoninputを実装するにはどうすればよいですか?
- 4. Require.jsでTinyMCEを実装するにはどうすればよいですか?
- 5. iPhoneでセッションタイムアウトを実装するにはどうすればよいですか?
- 6. nativescriptでビデオコールを実装するにはどうすればよいですか?
- 7. ES6でAngularJSを実装するにはどうすればよいですか?
- 8. JavaScriptでpostMessage()を実装するにはどうすればよいですか?
- 9. PHPでコールバックを実装するにはどうすればよいですか?
- 10. C#でスレッドアフィニティを実装するにはどうすればよいですか?
- 11. レールでアクセスログを実装するにはどうすればよいですか?
- 12. FlashでRichTextEditorを実装するにはどうすればよいですか?
- 13. ライブラリプロジェクトでアプリケーションインデックスを実装するにはどうすればよいですか?
- 14. Androidでウェブフックを実装するにはどうすればよいですか?
- 15. Reactでトランジションアニメーションを実装するにはどうすればよいですか?
- 16. イオンアプリでダイナミックテーマを実装するにはどうすればよいですか?
- 17. ページスクロールでアニメーションを実装するにはどうすればよいですか?
- 18. jQueryでオプションを実装するにはどうすればよいですか?
- 19. ShapelessでToTraversableを実装するにはどうすればよいですか?
- 20. アンドロイドスタジオでコードを実装するにはどうすればよいですか?
- 21. IronPythonでインターフェイスを実装するにはどうすればよいですか?
- 22. iPadにカスタムグリッドを実装するにはどうすればよいですか?
- 23. PagingAndSortingRepositoryにPostFilterを実装するにはどうすればよいですか?
- 24. アプリケーションにタッチイベントを実装するにはどうすればよいですか?
- 25. クラスをActionListenerに実装するにはどうすればよいですか?
- 26. プリローダーアニメーションをウェブサイトに実装するにはどうすればよいですか?
- 27. commentsにacts_as_followerを実装するにはどうすればよいですか?
- 28. ドラッグアンドドロップをキャンバスに実装するにはどうすればよいですか?
- 29. Dipity Timeline UIを実装するにはどうすればよいですか?
- 30. PropertyChangeイベントを実装するにはどうすればよいですか?
ありがとう、それは正しい軌道に乗った。いくつかのタイプのアクセスでは、常に最新のバージョンが必要なので、2つのアプローチを混在させると思います。特定のバージョンを照会するので、バージョン・プロパティーを関係に追加します。 –
@AaronDigulla同様のシナリオを作成したいと思います。私は2つの質問があります:1) 'Car'のバージョン管理されたノードを保存したいとし、' carId'(UUID)フィールドにインデックスを置いているとしましょう。まったく同じ索引フィールド( "Retrieve the Car 32"のような問合せとの潜在的な競合?)を持つ3つのバージョン化された 'Car'sで終わるのは問題ではありませんか? 2)あなたの '[:CURRENT]'解決策では、新しいバージョンごとに、以前の '[:CURRENT]'関係を新しい 'Car'バージョンを指すように分割しなければならないと想像します。 [:PREVIOUS] '以前の' Car'の関係? – Mik378
あなたの最初の質問では、UUIDを不変のアイテム、つまりcar + versionの組み合わせにすることを検討します。それぞれのリビジョンは新しいUUIDを作成し、これらをチェーンしてバージョン履歴を表すことができます。あなたの2番目の質問について:はい - 表示される新しいバージョンごとに関係を壊して再構築する必要があります(リンクされたリストに項目を挿入するのと同じように)。 –