私はCouchDBを使い始めたばかりで、データベースに複数のバージョンのデータを保持していることに気付きました。各バージョンが現在追加されているフィールドのフルコピーであることを意味しますか?それはディスク上の冗長データを保持するか、バージョンは単なるインクリメンタルバージョンですか?複数のバージョンのcouchDBは冗長データを保持していますか?
答えて
のCouchDBは、ドキュメントの複数完全リビジョンを保持し、それがない店増分変更を行います。 CouchDBの内部では、追加専用のデータ構造が使用されるため、新しいリビジョンがデータベースファイルに追加されます。
さらに、CouchDBはMVCC(マルチバージョン並行性制御)を使用しており、同時にライターを許可しながらロックを必要としません。 (この機能の詳細についてはtheir documentationで読むことができます)これは、リビジョン番号がそのメカニズムの重要な部分であり、以前のリビジョンをそのプロセスに役立てるために重要です。 (特に複製されたセットアップでconflict resolutionの場合)
つまり、ドキュメントを変更するたびにデータベースに重複があります。したがって、同じ文書を何度も変更すると、膨大なデータベースファイルが作成される可能性があります。さらに、変更の少ない非常に大きな文書でも同じ効果が得られます。各ドキュメントについて、最新のバージョンのみがデータベースによって「アクティブ」とみなされますが、古いリビジョンのはのままです。 (それ以上のことについて)
これは非効率的で無駄に思えるかもしれませんが、CouchDBではcompactionという機能があります。このプロセスでは、データベースファイルからすべてのリビジョン(最新のものを除く)が削除されます。 CouchDB 2.0以前は、これは一般的に管理者が手動で起動しましたが、現在ははるかに自動化されています。
CouchDBに関するよくある誤解の1つは、複数のバージョンをバージョン管理システム(git、svnなど)のように使用できることです。これにより、データベースの履歴レコードをいつでも保持することができます。しかし、MVCCは純粋に同時実行制御のため、これは完全に間違っています。前に述べたように、圧縮は古いリビジョンを削除するので、いつでもデータベースに存在する最新のリビジョンのみに依存する必要があります。
すべてのCouchDBのofficial documentationを読むことを強くお勧めします。特に長すぎるわけではなく、アプリケーションの構築方法を決定するときに使用できる内部とトレードオフについては非常に優れています。
- 1. CouchDB、小さな冗長情報を保存する
- 2. 冗長データを削除しますか?
- 3. CouchDBは複数の範囲クエリをサポートしていますか?
- 4. レールに冗長アクションロジックを持つ複数コントローラ
- 5. 削除冗長データ
- 6. Djangoテンプレート:選択の冗長バージョン
- 7. オーラストレージ - 数秒間データを保持しますか? (長い間保持する必要があります)
- 8. 私はこのようになります冗長リストを入力していた冗長リストから
- 9. 複数引数の関数の最初の引数のデフォルト値は冗長か?
- 10. Dockerは冗長性を構成していますか?
- 11. 冗長コードはどうしますか?
- 12. 複数の用語を冗長なしに書く
- 13. は長い間、長い間シンボルを保持できますか?
- 14. 複数のデータを列に保持
- 15. I2C eepromの冗長値と冗長システム
- 16. データの冗長性を避ける
- 17. 冗長デリゲートコンストラクタコールを削除しますか?
- 18. 冗長コードを削除しますか?
- 19. php変数は複数のデータ型を同時に保持できますか?
- 20. アプリ/ウェブサイトはどこのデータを保持していますか?
- 21. SNSは自分のデータを保持していますか?
- 22. Hibernateは常に冗長クエリを実行しています
- 23. Firebaseマルチロケーションアップデート、アップデートの一部として冗長データを削除
- 24. 冗長データをcassandraに格納する
- 25. Grails - 複数の結合でリストビューに冗長データが表示される
- 26. キャッシュは複数のプロセスからデータを保持できますか?
- 27. 複数の耳の中の冗長ライブラリの配置
- 28. 冗長なログを持ち、コンソール出力を非冗長に保つにはどうすればよいですか?
- 29. excelデータをcouchDBに保存
- 30. 冗長ジェネリックパラメータは