Upload
daichi-koike
View
657
Download
1
Embed Size (px)
Citation preview
Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.
DP4版と侮るなかれ!現時点でもN1QLは実用に耐えうる
株式会社サイバード ビジネス戦略統括本部 小池 大地 (Daichi KOIKE)
2015年8月31日
1
Couchbase Live Tokyo
Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.
自己紹介
{ "名前" : "小池 大地", "入社" : "2013年新卒入社", "仕事" : [ "共通システム開発", "だいたいiOS", "ときどきサーバ" ], "連絡先" : "[email protected]"}
2
Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.
N1QL(ニッケル)
• SQLライクなクエリ言語
• JSONドキュメントに対してSQLを使用して検索できる
• Couchbase Server 4.0に搭載
• JDBC/ODBCドライバも開発中
4
Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.
N1QLへの期待
• 欠点であるクエリの改善になるか?
• SQLと同じ感覚で使えるか?
• パフォーマンスは?etc…
5
Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.
Couchbaseの利用
様々なログデータをCouchbase Serverに集約し、アプリの品質向上やビジネスの改善に活用しています。
6
Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.
データ活用例
主要データは集計し、社内ツール上で公開しています。
9
このツールとN1QLを連携
Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.
N1QLの導入目的
開発時に蓄積されたクラッシュ情報をエンジニアが自由に抽出できるようにし、品質向上に役立てる。
10
Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.
N1QL DP4版の導入手順
エンジンをCouchbase Serverに接続した後、PRIMARY INDEXを作成する。その後はREST API経由でアクセス。
$ cbq-engine -datastore=http://HOSTNAME:8091/
$ cbq -engine=http://HOSTNAME:8093/
cbq> CREATE PRIMARY INDEX ON `bucket-name`;
11
Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.
4.0 beta版では
エンジンは本体に内蔵されている。グローバルセカンダリインデックス(GSI)を指定できるようになった。
$ cbq -engine=http://HOSTNAME:8093/
cbq> CREATE PRIMARY INDEX ON `bucket-name` USING GSI;
12
Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.
運用してみて
• トラブルは、検索が完了せずひたすら検索し続けるという現象が一度発生したのみで、ちゃんと動く
• 数千ドキュメントをSELECTするぐらいなら1~2秒でレスポンスが返る(長くて5秒ぐらい)
• 正式版でのパフォーマンスに期待
14
Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.
N1QLの可能性
JDBC/ODBCドライバの提供もされるため、既存ツールとの連携が容易
16
Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.
ANY/EVERY - SATISFIES
配列の各要素を走査し、 条件を満たすドキュメントのみ返す。
SELECT * FROM tutorial WHERE ANY child IN tutorial.children SATISFIES child.age > 10 END
ANY - 配列のいずれかの要素 EVERY - 配列のすべての要素
18
"children": [ { "age": 17, "fname": "Aiden", "gender": "m" }, { "age": 2, "fname": "Bill", "gender": "f" } ]
Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.
ANY/EVERY - SATISFIES
Viewとの比較。
SELECT * FROM tutorial WHERE ANY child IN tutorial.children SATISFIES child.age > 10 END
function (doc, meta) { if (meta.type === 'json' && doc.children){ for (i = 0; i < doc.children.length; i++) { if (doc.children[i].age > 10) { emit(meta.id, doc); } } } }
19
Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.
JOIN
複数ドキュメントをJOINする。以前は不可能だったBucketをまたいだJOINも可能。
SELECT * FROM users_with_orders usr JOIN orders_with_users orders ON KEYS ARRAY s.order_id FOR s IN usr.shipped_order_history END
20
"shipped_order_history": [ { "order_id": "T103929516925" }, { "order_id": "T573145204032" } ]
order_idがorders_with_usersのKey
Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.
UNNEST
ネストした要素のネストを解除し、 親要素と結合する。
SELECT tutorial.fname AS pfname,children.age, children.fname, children.gender FROM tutorial UNNEST children WHERE tutorial.fname = 'Dave'
childrenを単独ドキュメントのように操作できる。
21
{ "fname": "Dave", "children": [ { "age": 17, "fname": "Aiden", "gender": "m" }, { "age": 2, "fname": "Bill", "gender": "f" } ] }
Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.
UNNEST22
{ "fname": "Dave", "children": [ { "age": 17, "fname": "Aiden", "gender": "m" }, { "age": 2, "fname": "Bill", "gender": "f" } ] }
{ "age": 17, "fname": "Aiden", "gender": "m" }
{ "age": 2, "fname": "Bill", "gender": "f" }
{ "fname": "Dave", "children": [ 省略 ] }
{ "fname": "Dave", "children": [ 省略 ] }
+
+
Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.
UNNEST
Daveには2人の子供がいるので、 2個のドキュメントが実行結果として返される。
SELECT tutorial.fname AS pfname, children.age, children.fname, children.gender FROM tutorial UNNEST children WHERE tutorial.fname = 'Dave'
23
{ "results": [ { "age": 17, "fname": "Aiden", "gender": "m", "pfname": "Dave" }, { "age": 2, "fname": "Bill", "gender": "f", "pfname": "Dave" } ] }
Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.
EXPLAIN
クエリの実行計画も確認できる。
EXPLAIN SELECT * FROM tutorial WHERE children IS NULL
24
Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.
EXPLAIN{ "#operator": "Sequence", "~children": [ { "#operator": "PrimaryScan", "index": "#primary", "keyspace": "tutorial", "namespace": "default", "using": "default" }, { "#operator": "Parallel", "~child": { "#operator": "Sequence", "~children": [ { "#operator": "Fetch", "keyspace": "tutorial", "namespace": "default" },
25
{ "#operator": "Filter", "condition": "((`tutorial`.`children`) is null)" }, { "#operator": "InitialProject", "result_terms": [ { "star": true } ] }, { "#operator": "FinalProject" } ] } } ] }
Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.
クエリの高機能化
従来のViewではできない(難しい)ことができるようになった。
26
N1QL
View
Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.
最後に
• Couchbase Liteでも使えるようになるか?
• 面白いので是非みなさん使ってみてください
27
Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.
告知1
Couchbase Mobile Workshop Tokyo
日程: 9/1(火) 10:00 ~ 17:00場所: Theatre CYBIRD 軽食も出るらしいですよ。
28
Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.
告知2
Couchbase Administrator Workshop Tokyo
日程: 9/30(水) 10:00 ~ 17:00場所: Theatre CYBIRD 軽食も出るらしいですよ。
29