10

NoSQL 集約ストアがキー値データベース、列ファミリー データベース、またはドキュメント データベースのいずれであるかに関係なく、値のバージョン管理をサポートすると考えました。少しグーグルで調べた結果、この仮定は間違っていて、DBMS の実装に依存しているだけだと結論付けました。これは本当ですか?

私は、Cassandra と BigTable がそれをサポートしていることを知っています (両方とも列ファミリー ストア)。Hbase (列ファミリー) と Riak (Key-Value) はそうですが、Redis と Hadoop (Key-Value) はそうではないようです。Mongo DB (ドキュメント) はCouchbase を実行しますが、MongoDB は実行しません (ドキュメント ストア)。ここにはパターンがありません。経験則はありますか?(たとえば、「キー バリュー ストアには一般的にバージョン管理がありませんが、列ファミリー データベースとドキュメント データベースにはバージョン管理があります」)

私がやろうとしていること: URL から PNG 画像への Web サイトのスクリーンショットのデータベースを作成したいと考えています。バージョニングは別として、問題を解決する最も簡単なソリューションであるため、キー値ストアを使用したいと思います。しかし、ウェブサイトが変更または廃止され、データベースを更新したときに、古い画像を失いたくありません。バージョン管理のあるキー値データベースを選択したとしても、多くのキー値データベースがバージョン管理をサポートしていないという制約なしに、別のキー値データベースに切り替える余裕が欲しいです。そこで私は、集合 NoSQL データベースの連続体の中で、どのレベルの洗練度でバージョニングがデータ モデルの暗黙の機能になるのかを理解しようとしています。

4

2 に答える 2

10

Key-Value ストアからのバージョニング サポートは実際には必要ありません。

データ ストアで本当に必要なのは、効率的なスキャン/範囲クエリ機能だけです。

これは、データストアが辞書順でエントリを取得できることを意味します。

ほとんどの KV ストアがそうしているので、これは簡単です。

これはあなたがそれを行う方法です:

  1. バージョン管理されたキーを作成します。

    元の名前を固定長にハッシュできない場合は、元のキーの長さを先頭に追加します。次に、キーまたは元のキー自体のハッシュを入れ、固定長のエンコードされたバージョン番号で終了します (したがって、最大バージョンに対して番号を反転することにより、上位バージョンから下位バージョンに辞書式に並べられます)。

  2. クエリ

    可能な最大バージョンからバージョン 0 までの範囲クエリを実行しますが、取得するキーは 1 つだけです。

終わり

明示的なバージョンが必要ない場合は、タイムスタンプも使用できるため、最後のバージョンを取得せずに挿入できます。

于 2014-10-27T14:08:07.850 に答える
5

これに対する非常に興味深いアプローチは、Datomicデータベースです。バージョンを保存するのではなく、Datomic では、挿入のみの更新はありません。データベース全体は不変です。つまり、接続時にデータベースを表示したい真実の瞬間を指定でき、履歴全体には、その時点までに行われた変更のみが含まれているように見えます。あるいは、データベースに挿入されたものはすべて、その履歴をさかのぼって照会することができます。また、データベースを分岐して、別の分岐にないデータを 1 つの分岐に作成することもできます (プログラミングでは、複数の履歴を作成できる git ベースのデータベースのようなものです)。

于 2015-10-22T04:58:31.193 に答える