30
Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved. DP4版と侮るなかれ! 現時点でもN1QLは実用に耐えうる 株式会社サイバード ビジネス戦略統括本部 小池 大地 (Daichi KOIKE) 2015年8月31日 1 Couchbase Live Tokyo

Couchbase Live Tokyo 2015 - DP4版と侮るなかれ!現時点でもN1QLは実用に耐えうる

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の Developer Preview 4 時点での内容です。

3

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.

サーバ構成7

表側

裏側

Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.

データ活用例

主要データは集計し、社内ツール上で公開しています。

8

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.

13

DEMO

Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.

運用してみて

• トラブルは、検索が完了せずひたすら検索し続けるという現象が一度発生したのみで、ちゃんと動く

• 数千ドキュメントをSELECTするぐらいなら1~2秒でレスポンスが返る(長くて5秒ぐらい)

• 正式版でのパフォーマンスに期待

14

Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.

N1QLの可能性

データの蓄積から集計まで Couchbaseに一元化できるかも?

15

Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.

N1QLの可能性

JDBC/ODBCドライバの提供もされるため、既存ツールとの連携が容易

16

Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.

N1QLの構文

面白そうな構文紹介

17

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

Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.

30

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