2017-01-06 3 views
0

私はCouchDBを使い始めたばかりで、データベースに複数のバージョンのデータを保持していることに気付きました。各バージョンが現在追加されているフィールドのフルコピーであることを意味しますか?それはディスク上の冗長データを保持するか、バージョンは単なるインクリメンタルバージョンですか?複数のバージョンのcouchDBは冗長データを保持していますか?

答えて

1

のCouchDBは、ドキュメントの複数完全リビジョンを保持し、それがない店増分変更を行います。 CouchDBの内部では、追加専用のデータ構造が使用されるため、新しいリビジョンがデータベースファイルに追加されます。

さらに、CouchDBはMVCC(マルチバージョン並行性制御)を使用しており、同時にライターを許可しながらロックを必要としません。 (この機能の詳細についてはtheir documentationで読むことができます)これは、リビジョン番号がそのメカニズムの重要な部分であり、以前のリビジョンをそのプロセスに役立てるために重要です。 (特に複製されたセットアップでconflict resolutionの場合)

つまり、ドキュメントを変更するたびにデータベースに重複があります。したがって、同じ文書を何度も変更すると、膨大なデータベースファイルが作成される可能性があります。さらに、変更の少ない非常に大きな文書でも同じ効果が得られます。各ドキュメントについて、最新のバージョンのみがデータベースによって「アクティブ」とみなされますが、古いリビジョンののままです。 (それ以上のことについて)

これは非効率的で無駄に思えるかもしれませんが、CouchDBではcompactionという機能があります。このプロセスでは、データベースファイルからすべてのリビジョン(最新のものを除く)が削除されます。 CouchDB 2.0以前は、これは一般的に管理者が手動で起動しましたが、現在ははるかに自動化されています。

CouchDBに関するよくある誤解の1つは、複数のバージョンをバージョン管理システム(git、svnなど)のように使用できることです。これにより、データベースの履歴レコードをいつでも保持することができます。しかし、MVCCは純粋に同時実行制御のため、これは完全に間違っています。前に述べたように、圧縮は古いリビジョンを削除するので、いつでもデータベースに存在する最新のリビジョンのみに依存する必要があります。

すべてのCouchDBのofficial documentationを読むことを強くお勧めします。特に長すぎるわけではなく、アプリケーションの構築方法を決定するときに使用できる内部とトレードオフについては非常に優れています。

関連する問題