EnterpriseZine(エンタープライズジン)

EnterpriseZine(エンタープライズジン)

テーマ別に探す

N1QL入門編

edited by DB Online   2015/10/28 06:00

 前回は、Couchbase SDKライブラリを利用したプログラムのコーディングを開始し、Couchbase Serverへ接続して、カウントを集計する簡単なN1QLを実行しました。今回はN1QLならではの、"ARRAY", "UNNEST", "JOIN"を利用したクエリや、グローバルセカンダリインデックス(GSI)を利用したクエリの高速化をご紹介します。

 ハンズオンの内容でご不明な点や、Couchbaseに関するご質問は、FacebookのJapan Couchbase User Group、もしくは、coucchbase@couchbase.comへメールでお問い合わせください。

祝! Couchbase 4.0正式リリース!

 2015年10月6日、遂に強力なN1QLクエリ言語を搭載したCouchbase Server 4.0正式版がリリースされました!

 本連載をご覧の皆さん、今まさにN1QLを使って、スケーラブルかつ柔軟で迅速に成長できる次世代のシステムを開発する時がやってきました。

 是非ダウンロードして、色々なプロジェクトにご活用ください!

http://www.couchbase.com/
http://www.couchbase.com/

アプリケーション開発者がNoSQLに求めるものとは?

 アプリケーション開発者の皆様は、NoSQLに対して、優れたパフォーマンスとスケーラビリティ、シンプルなデータ集計、モバイルやWebアプリケーションと統合できるモダンなツールセットを求めているでしょう。

 N1QLの登場以前でも、Couchbase ServerではView(Map/Reduce)を駆使し、JSONドキュメントに対するクエリや集計機能を開発することができます。しかし、Map/Reduceは特定の処理には適しているものの、複数項目での検索や、アドホックなクエリなどの処理を実装するためには記述性が十分ではありません。また、JOINが行えないため、理想的ではない形でデータを重複させ、利用できるクエリモデルに適合させる対応を行うことがしばしばありました。

 N1QLはSQLをドキュメント型データに対して拡張した新しいクエリ言語です。SQLに加えて、以下の特徴があります。

  •  ネスト構造、配列に対応
  •  スキーマはオプショナルで一致する必要はない
  •  クラスタ上での分散処理

 SQLと比べて最も重要な違いは、データモデルです。SQLでは行列のテーブル構造を扱いますが、N1QLはJSONを扱います。このため、すべてのデータが特定のスキーマに一致する必要はありません。また、データのフィルタリングもJSONに最適化されており、ドット(.)や、カギ括弧([ ])を利用してネスト構造や配列の子要素にアクセスできます。また、値の有無を判定する"IS NULL"に加えて、項目が存在するかを判定する"IS MISSING"が追加されていたり、配列内の要素で絞り込むための、"ANY", "SOME", "EVERY"といった演算子も存在します。

高い記述性を持つ宣言的なクエリ言語

 クエリ言語を評価する際には、三つの重要な要件があります。

 まずは、そのクエリ言語がどれだけ表現力を持っているのか。これは言語の制限を克服するためにたくさんのカスタムコードを記述することなく、取得したい結果をうまく表現できるか、ということです。

 そして、その言語が宣言型か命令型かを評価するべきでしょう。宣言型言語はシステムに何が欲しいかを伝えるだけで、それを効率的に実行するために複雑な処理がどのように実行されるかを意識する必要がありません。

 これらに加えて重要な要件として、言語を取り囲むエコシステムがどれだけ成熟しているか、があります。これはその言語をサポートするアプリケーションやツールのエコシステムだけでなく、どれだけその言語に精通したユーザやデベロッパーコミュニティが存在するかも含まれます。

 SQLはこれらの特徴を持ち、データベースへのクエリ言語として数十年間、利用され続けています。N1QLはクエリ言語として完成度の高いSQLをベースに、JSONを扱えるように拡張されています。

 NoSQLデータベース製品として、複数のサーバで構築した分散環境で動作するという点にも注目です。Couchbase Server 4.0からは、KVSとしてデータ入出力を担当するData Service、保存されたJSONドキュメントのインデックスを集中管理するIndex Service、そしてN1QLの実行を担当するQuery Serviceという三つのサービスを利用できます。

 これらのサービスはそれぞれ異なる性質を持っています。例えば、Deta Serviceはサーバを追加することでリニアにスケールアウトしますが、Index Serviceはインデックスが分散してしまうとクエリのオーバヘッドが大きくなるため、より高スペックなマシンに集約して管理するのが理想的です。

 N1QLを実行すると、Couchbase Serverクラスタが最適な方法でクエリを実行します。クエリを解析し、実行計画を作成して、幾つかのパイプラインに分割され、クラスタ内で実行されます。

 N1QLやグローバルセカンダリインデックス(GSI)をはじめとする、Couchbase Server 4.0の新機能については、先日行われたCouchbase Live Tokyoでの発表資料、What's new in Couchbase Server 4.0 (日本語)もご参照ください。

※この続きは、会員の方のみお読みいただけます(登録無料)。


※この続きは、会員の方のみお読みいただけます(登録無料)。


著者プロフィール

  • 河村康爾(カワムラコウジ)

     Couchbase Japan株式会社  前職ではHadoopやNoSQLデータベースを利用したシステム開発を担当。Japan Couchbase User Groupのリーダを経て2015年より現職。ソリューションエンジニアとして製品説明、提案、導入支援、国内でのCouchbase公式トレーニングなど幅広い分野で活躍。マニュアルの和訳やブログ記事も執筆中。

バックナンバー

連載:NoSQLでSQL!? Couchbase Server - N1QLハンズオン!
All contents copyright © 2007-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5