はじめに
本記事では、オープンソースのJavaScriptデータベースであり、ブラウザ上で実行可能なPouchDBと、NoSQLドキュメント指向データベースであるCouchbase Serverとの関係について、整理します。
PouchDBとは
PoucDBと言う名前を初めて聞かれる人もいるかと思います。 以下は公式サイトからの引用です。
PouchDBは、Apache CouchDBに触発されたオープンソースのJavaScriptデータベースであり、ブラウザー内で適切に実行されるように設計されています。
PouchDBは、Web開発者がオンラインと同様にオフラインでも機能するアプリケーションを構築できるようにするために作成されました。
これにより、アプリケーションはオフライン中にデータをローカルに保存し、アプリケーションがオンラインに戻ったときにCouchDBおよび互換性のあるサーバーと同期して、ユーザーが次にログインする場所に関係なく、ユーザーのデータの同期を維持できます。
下記の記事に書いたように、Couchbase ServerとCouchDBには、浅からぬ繋がりがあります。
Couchbase Serverとは何か?〜歴史を交えた概観
PouchDBとCouchbaseの関係の歴史
CouchbaseのSync Gateway 1.xでは、CouchDBとの互換性を維持する形で、PouchDBとのレプリケーションがサポートされていました。
Sync Gateway 1.0の時代に発表されたブログに以下のようなものがあります。
- Using PouchDB and Couchbase NoSQL in Your Node.js Web Application
- First steps with PouchDB & Sync Gateway
Sync Gateway 1系は、2020年4月にEnd Of Lifeを迎えました。
PouchDBとCouchbaseの現在の関係
Sync Gateway 2.xでは、REST APIからwebsocketへの移行など、プロトコルの大幅な仕様の変更が行われています。1.x時代のプロトコルは、既存のクライアント(Couchbase Lite)が利用されているシステムからの段階的移行に際する互換性維持の目的でのみ残されています。
PouchDBは、Sync Gateway 2.xのサポート対象とされていません。
また、PouchDBのGithubの以下のissueの回答にあるように、PouchDBでもサポート(テスト)されていないとされています。
We dont test or aim for Couchbase support, if Couchbase has CouchDB compatibility then we would but they broke it in various ways previously
PouchDB compatibility with Couchbase Sync Gateway #8015
ブラウザで稼働するデータベースと同期する別の方法
Couchbase Serverをリモートデータベースとして用い、ブラウザ上のローカルデータベースと組み合わせて利用するには、以下の方法が考えられます。
- HTML5の仕様に含まれるオフラインストレージ(IndexedDB)を使用する
- サーバーからの同期のために、Sync Gatewayのlongpoll APIを使用して変更をリッスンするプログラムを記述する。
- クライアントから変更を同期するために、ドキュメントの書き込みを行うプログラムを記述する。
この場合、過去に、Sync GatewayとPouchDB間で実現されていた、アウトオブボックスでの同期とは異なり、同期処理については、外部で実装する必要があります。
最後に
PouchDBをブラウザ上のローカルDBとして用いることにプライオリティがある場合、そして/あるいは、リモートのデータベースとの「アウトオブボックス」の同期が必要な場合、PouchDBとCouchDBの組み合わせを利用することができます。
以下の関連情報に、CouchbaseとCouchDBとの選択に際して、利用することのできる情報を掲載しておきます。