Couchbase ServerはCouchDBのビューエンジンの機能が組み込まれていますが、残りの機能の大部分はMembase Serverのコンポーネントとシステムによってサポートされます。
ここでは、CouchDBからCouchbaseへ既存のアプリケーションを移行する場合に特に重要となる違いについて言及しますこれらの違いによって、CouchDBにはなかったMembase Serverコンポーネントのスケーラビリティとパフォーマンス上の利点を得ることができます。
用語と概念の違い
CouchDBでは、(明示的または自動的に生成される)ドキュメントIDの概念を利用してJSON形式でデータベースに格納されます。CouchbaseにはドキュメントIDはありません。代わりに情報はキー/バリュー形式で保存されます。キーがドキュメントIDに、バリューがドキュメントに相当します。データの形式は同じです。
CouchDBと通信するためのインタフェースであるHTTP REST APIの大部分は、Couchbase Serverでは使用出来ません。作成、検索、更新、削除するための基本的なドキュメント操作はmemcachedプロトコルによってサポートされています。
また、ビュー以外の操作の多くも、CouchDB内のクライアントレベルでサポートされていません。たとえば、クライアントとしてデータベースを新規作成したり、添付ファイルを保存したり、ビューコンパクションなどの管理機能を実行することはできません。
Couchbase Serverは、情報はバケットと呼ばれる論理的なコンテナ内に格納されており、データベースの概念をサポートしていません。 これらは論理的に等価であり、プロジェクトやニーズに応じて情報を区分するために使用することができます。 バケットを使用すると、レプリカ数や、アクセスするために必要なポートや認証などの機能を持つことができます。
引き継がれている機能
Couchbase Serverでも、検索やビューの定義を作成するための操作やインターフェースはほとんど同じです。ビューはmap/reduce関数の組み合わせに基づいており、特に問題なくCouchDBで使っていたmap/reduce関数をそのまま利用することができます。主な違いは、ビューは、ドキュメントIDを出力しないということです。前述のとおり、Couchbaseでは、キー/バリュー形式でデータベースに格納されているため、それに対応するキーを出力します。
ビューの検索も同様です。開始、終了のドキュメントID、取得する行数やクエリの内容は、同じ引数を利用できます。ビューのキーとしてJSONの複合型(配列やハッシュ)も利用できます。CouchDBと同様にCouchbase Serverでも、ビューを更新せずにアクセスすることができます。
変更された機能
機能と操作に関して、CouchbaseとCouchDBでは以下を含む多くの変更点があります:
基本的なデータストレージ操作は、memcached APIを使用する必要があります。
明示的なレプリケーションがサポートされていません。 クラスタ内のノード間でレプリケーションは自動的に設定・有効化され、クラスタ内に情報を分散するために使用されています。
CouchDBのデータベースとCouchbase Server間でデータをコピーすることはできません。
明示的な添付ファイルはサポートされていませんが、キー/バリューのペアとして追加のファイルを格納することはできます。
CouchAppsはサポートされていません。
アップデートハンドラー、ドキュメントのバリデーション機能、およびフィルタはサポートされていません。
クラスタ構成、監視、およびビュー/ドキュメントの更新機能が組み込まれ、Web管理コンソールがある代わりに、Futonは存在しません。
運用とデプロイにおける変更点
実用的なレベルでの、CouchDBとCouchbase Serverの間の大きな違いは、クラスタリングと情報の分散のための方法が大きく異なるということです。CouchDBを使用すると、複数のノード間で情報をレプリケーションしてから、複数のマシン上のクライアントからの負荷を分散するために、プロキシサービスを使用する必要があるでしょう。
CouchbaseServerでは、情報の分散はクラスタ内で自動的に行われ、クラスタ内で分散している情報を保持しているサーバへCouchbase Serverのクライアントライブラリが自動的にクエリをリダイレクトします。このプロセスは自動化されています。
クライアントとアプリケーションの変更
CouchDBを利用したアプリケーションではJSON形式によりドキュエント情報を管理し、ドキュメントを識別するドキュメントIDを利用しているので、アプリケーションロジックとビューのサポートの大部分は同じままで大丈夫です。しかし、基本的なCRUDオペレーションのためのHTTP REST APIはmemcachedプロトコルを使用するように更新する必要があります。
さらに、CouchAppsがサポートされないため、CouchAppsに依存しているアプリケーションロジックについては、クライアント側のアプリケーションを再度開発する必要があります。