couchbase n1ql (couchbase meetup #7)

Post on 31-May-2015

381 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Couchbase Meetup #7「N1QL」 NoSQLデータベースであるCouchbase Serverを、SQLライクな構文で検索可能とするN1QLについて紹介します

TRANSCRIPT

N1QLnext generation query language

Fumiharu Kinoshita in Couchbase MeetUP Tokyo - #7

N1QLって?

• 「ニッケル」と読みます

• CouchbaseをSQLライクに検索できる機能

• SQLしか知らない人でもなんとなく使えます

Viewじゃダメなの?• Couchbaseには、標準でViewという検索のための仕組みがあり、非常に高速です。

• ただしViewは、事前に検索する項目を特定しておく必要があり、任意の項目で自由に検索したりソートしたりといったことができません。

• SQLに慣れている人にとって、NoSQLデータベースでの検索は手を出しにくかったりします。

SELECT relation, COUNT(*) AS count, AVG(age) AS avg_age  FROM tutorial   WHERE age > 18 AND email LIKE '%@yahoo.com'    GROUP BY relation     HAVING COUNT(*) > 1      ORDER BY AVG(age) DESC       LIMIT 1 OFFSET 1

結構なSQLが書けます

なお、CouchbaseはJSON形式でデータを保持しているので、必然的に、検索した結果はJSON形式となります。SELECT * FROM tutorial WHERE name = 'Ian'

{  "resultset": [   {    "age": 56,    "children": [     {      "age": 17,      "name": "Abama",     }    ],    "email": "ian@gmail.com",    "name": “Ian",   }  ] }

結果はJSONの配列形式で返却されます

また、結果だけでなく、項目の指定の仕方も多少異なります。 例えば、以下のようなデータで”city”が”東京”の条件で 検索したい場合

SELECT name FROM tutorial WHERE address.city = ‘東京’

{  “name” : “田中 太郎”,  “age” : 30,  “address” : {    ”country”: “日本”    “city”: “東京”   } }

{  “name” : “田中 太郎”,  “age” : 30,  “address” : {    ”country”: “日本”    “city”: “東京”   } }

{  “name” : “田中 太郎”,  “age” : 30,  “address” : {    ”country”: “日本”    “city”: “東京”  } }

配列の構造をもったデータの場合も、以下のように検索することができます。

SELECT age FROM tutorial WHERE children[0].age >10

{  “name” : “田中 太郎”,  “age” : 30,  “children” : [   {    “name”: “一郎”,    “age”: 10   },   {    ”name”: “二郎”    “age”: 7   }  ] }

{  “name” : “田中 太郎”,  “age” : 30,  “children” : [   {    “name”: “一郎”,    “age”: 10   },   {    ”name”: “二郎”    “age”: 7   }  ] }

{  “name” : “田中 太郎”,  “age” : 30,  “children” : [   {    “name”: “一郎”,    “age”: 12   },   {    ”name”: “二郎”    “age”: 9   }  ] }

でも配列のインデックスが 事前にわかるくらいなら 苦労しないんじゃ…

と思った方、普通そう思いますよね?

でも、ちゃんとそのための記法があります

配列中の項目指定SELECT name FROM tutorial WHERE ANY child.age > 10 OVER child IN children END

childrenの配列要素に childの別名をつける

要素中のいずれかのageが10以上

ちなみに、”ANY”を”ALL”にすると、すべての要素が一致という条件が指定できます WHERE ALL child.age > 10 OVER child IN children END

他にも便利なものがあります・配列の長さを条件に指定   WHERE LENGTH(children) > 1 !

・項目の存在チェック   WHERE children IS MISSING !

・ドキュメントのIDを取得   SELECT META() as meta FROM xxxxx !

その他にも、まだまだいっぱいあります。

でも、過度な期待はNG• あくまでSQLライクであり、そのものではありません

• 検索のみで、挿入、更新、削除はできません

• まだ、Developer Preview2なのであくまで開発者向け

• お世辞にも速いとは言えません(T_T)

実際に試してみたい方は、オンラインデモのページがありますので、インストールをしなくても実際に試すことができます。

http://query.pub.couchbase.com/tutorial/オンラインチュートリアル

couchbase n1ql 検索

または

おまけ

SQLが使えるなら JDBC Driverとか作れるかも?

そうすればJDBC対応のソフトから、Couchbase が使えるかも!!

!

という安直な考えから、実際に作ってみました

結果として...

• 実質処理の部分と言うよりJDBCのAPIの規格に

従うための実装が大半... • スキーマレスなので、そもそもテーブル情報や

項目の型情報が特定できない。 • メタデータの関連なのか、互換性に難あり?

ご清聴ありがとうございました

top related