エンタープライズ向けNoSQL Couchbase – AWSではじめるCouchbase
渡辺です。
今回、ドキュメント指向のNoSQLデータベースのひとつであるCouchbaseをAWSで試してみました。 何回かに分けて使用感などをレポートしたいかと思います。
Couchbaseとは?
Couchbaseは、いわゆるKey-Valueストアに分類されるデータストアです。 複雑なリレーションを持つデータ構造には向きませんが、データ量は増えてもパフォーマンスが落ちない性質があります。 また、Couchbaseはドキュメント指向のデータベースです。 スキーマを先に用意する必要が無く、柔軟なデータ構造をとることができます。
Couchbaseは非常にスケーラビリティが高く設計されています。 データサイズやサービスの成長に合わせ柔軟に簡単にクラスタを拡張できるのが大きな特徴です。 解りやすいGUIやAPIも提供されており、管理しやすさが特徴のひとつとなっています。
AWSにCouchbaseサーバを構築する
AWSのマーケットプレイスで提供されているAMIを利用すれば起動するだけで、Couchbaseを試すことができます。 マーケットプレイスでCouchbaseで検索すると、Community EditionとEnterprise Edition(2種)があります。 Enterprise Editionはサポート費用が別途必要となりますが、Community Editionは無償で利用可能です(AWSの利用料は発生します)。 Enterprise Editionは、Community Editionで利用できない幾つかの機能とサポートを受けられるバージョンです。 Enterprise Editionには、SilverとGoldと2種類ありますが、機能的な違いはなく、サポートレベルの違いです。
なお、Couchbaseサーバは最小でもmedium以上のインスタンスタイプを必要とします(推奨はlarge)。 試す場合はインスタンスの落とし忘れにご注意ください。
AMIを利用すれば、基本的な設定はすべて完了している状態で起動します。
インスタンスが起動したならば、http://hostname:8091 にアクセスし、管理コンソールを開きましょう。 ユーザ名は「Administrator」、パスワードはインスタンスIDが初期値になっています。
Couchbase Clusterとmemcached
これはログイン後のCluster概要画面です。
各ClusterにはRAMとDiskの利用状況が表示されています。 Couchbaseでは、一般的なデータベースと同様に永続化データはディスクに書き込まれますが、メモリを活用する事で高いパフォーマンスを実現しています。
データをCouchbaseに書き込む場合、クライアントから送られたデータはまずメモリ上に書き込まれます。 この時点でクライアントにレスポンスを返し、非同期でディスクにデータが永続化される仕組みです。 なお、このメモリ部分はmemcachedを利用しており、memcachedのAPIと親和性が高くなっています。
もちろん、重要なデータの書き込みなどの場合、メモリには保存され永続化に失敗するなどは困ります。 このため、メモリからディスクに書き込まれるまでレスポンスを返さない書き込みモードなども提供されています。
Bucketの作成
BucketはCouchbaseのデータストレージの基本単位となります。 クライアントからはデータをBucket名とキーを指定することで読み書きすることになります。
Bucketには、Bucket名の他、メモリサイズ・アクセス制御・レプリカ・ディスクIO・自動圧縮・フラッシュ設定などを設定できます。 後で変更は可能ですが、重要な部分はBucket Typeとメモリサイズです。
Bucket Type
Bucket TypeはCouchbaseとMemcachedを選択できます。 どちらを選択した場合も、フロントにmemcachedが配置され、データのキャッシュを行います。 Couchbaseを選択した場合はデータはディスクに永続化されますが、Memcachedを選択するとデータの永続化を行いません(つまり、基本的にはmemcachedを使う場合と変わらない挙動です)。
現在のバージョンではパフォーマンスとしてほとんど変わらないとのことなので、基本的にCouchbaseを選択すれば良いようです。
メモリサイズ
メモリサイズは、bucket毎に設定するmemcachedのサイズです。 多くとればとるほどディスクへのアクセスが減るためパフォーマンスがあがり、少ないとディスクI/Oが増えることになります。 データ量やアクセス頻度を考慮してチューニングする項目となりますが、今回はとりあえず500MBほど割り当てました。 勿論、クラスタのメモリサイズを超えて設定できません。
Clusterの確認
Bucketを作成し、Cluster Overviewの画面を開くと作成したBucketにメモリが割り当てられていることが確認できます。 まだドキュメントを登録していないため、ディスクはほとんど消費していません。
まとめ
とりあえずAWS上に1台構成でCouchbase Clusterを構築してみました。 マーケットプレイスでAMIが提供されるため、構築は一瞬で終わりますし、管理コンソールも使いやすそうな雰囲気です。
次回はクライアントからBucketにオブジェクトを登録したり、簡単なクエリを流してみたりしたいと思います。