2012-10-03 13 views

答えて

10

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

+0

ありがとう、それは正しい軌道に乗った。いくつかのタイプのアクセスでは、常に最新のバージョンが必要なので、2つのアプローチを混在させると思います。特定のバージョンを照会するので、バージョン・プロパティーを関係に追加します。 –

+0

@AaronDigulla同様のシナリオを作成したいと思います。私は2つの質問があります:1) 'Car'のバージョン管理されたノードを保存したいとし、' carId'(UUID)フィールドにインデックスを置いているとしましょう。まったく同じ索引フィールド( "Retrieve the Car 32"のような問合せとの潜在的な競合?)を持つ3つのバージョン化された 'Car'sで終わるのは問題ではありませんか? 2)あなたの '[:CURRENT]'解決策では、新しいバージョンごとに、以前の '[:CURRENT]'関係を新しい 'Car'バージョンを指すように分割しなければならないと想像します。 [:PREVIOUS] '以前の' Car'の関係? – Mik378

+1

あなたの最初の質問では、UUIDを不変のアイテム、つまりcar + versionの組み合わせにすることを検討します。それぞれのリビジョンは新しいUUIDを作成し、これらをチェーンしてバージョン履歴を表すことができます。あなたの2番目の質問について:はい - 表示される新しいバージョンごとに関係を壊して再構築する必要があります(リンクされたリストに項目を挿入するのと同じように)。 –

1
あなたはまた、他の側からそれに近づくことができ

(pages)-[:VERSION]->(V1)-[:VERSION]->(V2)-[:VERSION]->(V3) 
^            ^
    |             | 
category           current 
    node           version of page 

利点:あなたは新しいバージョンを作成するときに、あなただけのチェーンの最後にそれを追加していません(ページ)と現在のバージョンの間に "挿入"する必要があります。

欠点:チェーンを再構築しない限り、古いバージョンを捨てることはできません。しかし、これは頻繁な操作ではないでしょう。

関連する問題