パフォーマンスを得るために、Couchbase Serverはクライアントが利用する全ての情報をRAMに保存しようとします。低レイテンシをサポートするように、データの"ワーキングセット"はRAMに格納して直ちにアクセス可能な状態にすることが必要です。
Couchbase Serverは、ディスクへドキュメントを保存する機能を提供しています。これは、次の理由のためです:
永続化。Couchbaseは再起動後に自動的にデータをメモリに展開します。これはCouchbase Serverが既存のデータベースインフラとキャッシュの組み合わせより優れている点です。
より高速なウォームアップ時間。Couchbase Serverノードの運用においてはソフトおよびハードの障害が発生し、管理タスクを実行する必要があることでしょう。ディスクに情報を保存することにより、Couchbase Serverノードを起動する際に、データへのリクエストを素早く処理できるように、データベースをアクティブなデータセットをロードする"ウォームアップ"が可能です。
ディスクストレージは、物理RAMのサイズより大きなデータセットを格納できます。Couchbaseは利用頻度の高いデータをメモリに、そうでないデータはディスクにと、自動的にRAMとディスク間で(非同期にバックグラウンドで)データを移動します。
RAMからディスクにデータを移動するプロセスはejectionと呼ばれ、Couchbaseクラスタ内のバケットに設定された閾値に応じて自動的に実行されます。
クライアントがリクエストしたドキュメントIDに対応する情報が存在するか否かが分かる必要がありますが、ディスクストレージを利用する場合、これが問題になります。Couchbase Serverはメタデータ構造を利用してこれを実現しています。メタデータはデータベースに保存された各ドキュメントの情報をRAMに保持します。これによりサーバが常に"ドキュメントIDが見つからない"ことを判定できます。また、RAMからでも(この場合即座に返却されます)、ディスクからでも(遅延の後、あるいはタイムアウトになったら)、ドキュメントのデータを返すことができます。
ディスクとの間で情報を移動するプロセスは非同期です。サーバがアクティブなリクエストを処理している間に、バックグラウンドでメモリからディスクへデータを退避します。退避要求は、バックグラウンドでディスクに書き込まれるように退避キューに書き込まれます。データベースへの書込みの負荷が高い場合は、サーバが十分なデータをメモリからディスクへ退避するまでの間、一時的なメモリ不足をクライアントへ通知する可能性があります。
同様に、サーバがメモリ上に存在しないアイテムをディスクからロードする場合、その処理はロードキューを処理するバックグラウンドプロセスによって実行され、ディスクから読み取ったデータはメモリへと返されます。クライアントは、サーバがデータをメモリにロードし、情報を返すまで待たされます。
この非同期による特性とキューの利用によって、読取りと書込みを非常に高速に処理でき、Couchbase Serverを起動しているサーバのパフォーマンス劣化を引き起こす、典型的な負荷と性能のピークを抑えることができます。