couchbase n1ql (couchbase meetup #7)

16
N1QL next generation query language Fumiharu Kinoshita in Couchbase MeetUP Tokyo - #7

Upload: bunjik

Post on 31-May-2015

381 views

Category:

Technology


0 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Couchbase N1QL (Couchbase Meetup #7)

N1QLnext generation query language

Fumiharu Kinoshita in Couchbase MeetUP Tokyo - #7

Page 2: Couchbase N1QL (Couchbase Meetup #7)

N1QLって?

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

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

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

Page 3: Couchbase N1QL (Couchbase Meetup #7)

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

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

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

Page 4: Couchbase N1QL (Couchbase Meetup #7)

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が書けます

Page 5: Couchbase N1QL (Couchbase Meetup #7)

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

{  "resultset": [   {    "age": 56,    "children": [     {      "age": 17,      "name": "Abama",     }    ],    "email": "[email protected]",    "name": “Ian",   }  ] }

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

Page 6: Couchbase N1QL (Couchbase Meetup #7)

また、結果だけでなく、項目の指定の仕方も多少異なります。 例えば、以下のようなデータで”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”: “東京”  } }

Page 7: Couchbase N1QL (Couchbase Meetup #7)

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

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   }  ] }

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

Page 8: Couchbase N1QL (Couchbase Meetup #7)

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

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

Page 9: Couchbase N1QL (Couchbase Meetup #7)

配列中の項目指定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

Page 10: Couchbase N1QL (Couchbase Meetup #7)

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

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

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

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

Page 11: Couchbase N1QL (Couchbase Meetup #7)

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

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

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

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

Page 12: Couchbase N1QL (Couchbase Meetup #7)

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

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

couchbase n1ql 検索

または

Page 13: Couchbase N1QL (Couchbase Meetup #7)

おまけ

Page 14: Couchbase N1QL (Couchbase Meetup #7)

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

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

!

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

Page 15: Couchbase N1QL (Couchbase Meetup #7)

結果として...

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

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

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

Page 16: Couchbase N1QL (Couchbase Meetup #7)

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