国内最大のCouchbaseイベント、「Couchbase Live Tokyo」が開催されます!
サーバとモバイルの各トラックでそれぞれホットな話題の提供、欧州航空会社大手Ryanairの事例紹介、また今回スポンサーを頂きました各企業様より他ソリューションとの連携など、魅力的なセッションを多数用意しております。
イベントの詳細およびお申込みはこちらよりご参照ください。
本連載のねらい
初めてNoSQLというキーワードが盛り上がりを見せた2010年頃から、巨大なデータセットや大量のユーザからのアクセスを処理するために利用されています。一方、調査、検証を行うものの、導入まで至らずに現在でもRDBMSを継続して利用されている企業も多いのが現状です。
それから5年が経ち、NoSQL製品、ベンダも淘汰されてきました。オープンソースを積極的に利用して成長を続けるユーザ企業を支える中で、生き残ったNoSQL製品群は信頼性やセキュリティなど、エンタープライズシステムで利用できる十分な機能セットが実装され、近年では国内でもNoSQLの利用を改めて検討されるお客様も増えています。
しかしスケーラビリティやスキーマの柔軟性など、魅力的な特徴を持つ一方、慣れ親しんだSQLが利用できないことで、開発者の方からはどのようにアプリケーション開発を進めていくのかイメージできないという声も聞こえてきます。NoSQLを利用してシステム開発ができるエンジニアの確保もシステムで利用する障壁になるケースもあります。
そこで、本連載では、ドキュメント型NoSQLのCouchbase Serverを利用したアプリケーション開発をハンズオン形式でご紹介していきます。先日リリースされたCouchbase Server 4.0のベータ版を利用し、最新のSDKと強力なJSONドキュメントクエリ言語「N1QL」を開発者の方に気軽にお試しいただき、NoSQLを利用したシステム開発のイメージを少しでもご理解いただければ幸いです。
Couchbase Server概要
Couchbase Serverをご存じない方もいらっしゃると思うので、まず、簡単に製品の特徴を説明します。
Couchbase Serverは、分散キャッシュストレージのmemcachedにクラスタ管理、データの永続化を加えたMembaseと、Apache CouchDBという二つのオープンソースプロダクトが融合して誕生した、オープンソースの高性能ドキュメント型NoSQLデータベース製品です。"Couch"というとApache CouchDBを連想される方もいらっしゃると思いますが、Couchbase Serverは全くの別物で、memcached互換プロトコルによる高速なデータアクセスと、優れたクラスタ管理機能、JSONドキュメントに対するクエリをサポートしています。製品誕生の歴史、背景についての詳細はこちらの記事もご参照ください。
多くの利用事例を持つCouchbase Serverですが、採用の決め手となっている特徴を3つご紹介します。
その1. JSONによる柔軟なスキーマ
Couchbase Serverでは、JSON形式でデータベースにデータを保存します。RDBMSのようにテーブルの行列形式に変換することなく、入れ子階層や、繰り返しを持つアプリケーションオブジェクトを柔軟に表現できます。
データを保存するために事前にテーブルのスキーマ設計を行う必要がないため、アプリケーションの成長に合わせて、変化していく多彩なデータモデルをストレスなく保存することができます。
保存したJSONドキュメント内の任意の項目でインデックスを作成し、クエリを実行したり、集計が可能です。
その2. 高いスケーラビリティと耐障害性
Couchbase Serverは複数のサーバでデータベースクラスタを構成し、クラスタへのサーバの追加によってスケールアウト、サーバの削除によってクラスタの縮小を、データベースおよびアプリケーションのダウンタイムを発生させずに、オンラインで実行することが可能です。IaaSのクラウドプラットフォームと非常に相性が良く、ビジネスの成長に合わせて柔軟にデータベースの規模を伸縮可能です。
先のイメージでは、三台のサーバで一つのクラスタを構成しています。Couchbase Serverでは自動的にシャーディングを行い、各サーバに均等にデータを分散しています。また、各サーバが持つデータは他のサーバ上にレプリカを作成し、サーバに障害が発生してもレプリカのデータを利用してシステムを稼働させ続けることが可能です。
Couchbase Serverを利用するクライアントアプリケーションからは、Couchbaseの提供するSDKを利用してクラスタへと接続します。SDKがクラスタの構成を理解するため、サーバの追加や削除を行いクラスタのトポロジが変わっても、自動的に追従することができます。
さらに、クラスタ内のデータレプリケーションに加え、Couchbase Serverはクラスタ間のレプリケーションにも対応しています。下図のように地理的に離れたデータセンタ間でデータを同期でき、データのローカリティ向上、ディザスタリカバリ対策などに利用できます。
その3. シンプルな運用管理
Couchbase ServerはLinuxやWindowsサーバに、ダウンロードしたバイナリパッケージをインストールして利用します。分散システムでありながら、インストールに必要なパッケージは一つだけで、導入が非常に簡単です。一つのパッケージ内に、キャッシュ層、永続化層、管理画面および管理用コマンド、クラスタ管理プロセスが同梱されています。また、これらのプロセスはCouchbase Serverプロセスツリー内で管理されているため、Couchbase Serverプロセスを起動すると、データベースクラスタの稼働に必要なデーモンを全て起動することができます。
複数のサーバにCouchbase Serverをインストールし、クラスタとして運用します。付属の管理画面から、クラスタへのサーバ追加、削除、データの再配置(リバランス)、クラスタ間レプリケーション(XDCR)の設定などの操作がグラフィカルなインタフェースで実行できます。また、クラスタ全体、サーバ単位、バケット単位の統計情報を集約して表示でき、Couchbase Serverクラスタの挙動をモニタリングすることができます。リソースの利用状況やデータ増加傾向などから、クラスタを拡張するタイミングを適切に把握することができます。
なお、クラスタの管理操作や統計情報は管理画面だけでなく、コマンドラインから実行可能な管理用コマンドや、管理用REST APIからも実行可能です。「統計情報と連動して、新たなCouchbase Serverをインストールしてクラスタに参加させ、リバランスを行う」といった自動スケーリングを実現することも可能です。
Couchbase Server 4.0 Beta
冒頭でも触れましたが、本連載では先日リリースされたCouchbase Server 4.0ベータ版を利用し、Couchbase Server 4.0から利用可能となるJSONドキュメントのクエリ言語、「N1QL (ニッケル)」を中心に扱っていきます。
とても簡単なN1QLクエリを一つ見てみましょう:
SELECT * FROM tutorial WHERE fname = 'Koji'
これは'tutorial'というバケット内に保存された、'fname'が'Koji'のJSONドキュメントを検索しています。開発者の皆様が慣れ親しんだSQLの構文そのものですね!
Couchbase Server 4.0の目玉機能であるN1QLは、'SQL for Document'とも呼ばれ、JSONドキュメントのクエリを非常に簡単に実行できる強力なクエリ言語です。N1QLを実行できるJDBC/ODBCドライバも並行して開発中であり、SQLをインターフェイスとする多くの周辺ツールからも直接Couchbase Serverに保存したJSONドキュメントへアクセスが可能となります。
SQL準拠の構文だけでなく、JSONドキュメントならではの入れ子階層や配列を扱うための構文が用意されています。N1QLでできることは非常に多くあります、是非こちらのQuery Language Tutorialもご覧ください。
このCouchbase Server 4.0では、N1QL用に新しく開発されたインデックスサービスや、クエリを実行するクエリサービスといった新しいコンポーネントが追加されています。Couchbase Server 4.0の新機能については筆者のブログCouchbase Server 4.0 デベロッパープレビューの紹介でも紹介しています。