Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

Avatar for Daichi Koike

Daichi Koike

August 31, 2015
Tweet

More Decks by Daichi Koike

Other Decks in Technology

Transcript

  1. Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved. DP4版と侮るなかれ!
 現時点でもN1QLは実用に耐えうる

    株式会社サイバード ビジネス戦略統括本部 小池 大地 (Daichi KOIKE) 2015年8月31日 1 Couchbase Live Tokyo
  2. Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved. 自己紹介 {


    "名前" : "小池 大地",
 "入社" : "2013年新卒入社",
 "仕事" : [
 "共通システム開発",
 "だいたいiOS",
 "ときどきサーバ"
 ],
 "連絡先" : "[email protected]"
 } 2
  3. Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved. はじめに N1QLの

    Developer Preview 4
 時点での内容です。 3
  4. Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved. N1QL(ニッケル) •

    SQLライクなクエリ言語 • JSONドキュメントに対してSQLを使用して検索できる • Couchbase Server 4.0に搭載 • JDBC/ODBCドライバも開発中 4
  5. Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved. N1QLへの期待 •

    欠点であるクエリの改善になるか? • SQLと同じ感覚で使えるか? • パフォーマンスは?
 
 etc… 5
  6. Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved. Couchbaseの利用 様々なログデータをCouchbase

    Serverに集約し、アプリの 品質向上やビジネスの改善に活用しています。 6
  7. 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
  8. 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
  9. Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved. 運用してみて •

    トラブルは、検索が完了せずひたすら検索し続けるとい う現象が一度発生したのみで、ちゃんと動く • 数千ドキュメントをSELECTするぐらいなら1~2秒でレス ポンスが返る(長くて5秒ぐらい) • 正式版でのパフォーマンスに期待 14
  10. 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" } ]
  11. 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
  12. 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
  13. 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" } ] }
  14. Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved. UNNEST 22

    {
 "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": [ 省略 ] }
  15. 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" } ] }
  16. 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" } ] } } ] }
  17. Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved. 最後に •

    Couchbase Liteでも使えるようになるか? • 面白いので是非みなさん使ってみてください 27
  18. Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved. 告知1 Couchbase

    Mobile Workshop Tokyo 日程: 9/1(火) 10:00 ~ 17:00
 場所: Theatre CYBIRD
 軽食も出るらしいですよ。 28
  19. Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved. 告知2 Couchbase

    Administrator Workshop Tokyo 日程: 9/30(水) 10:00 ~ 17:00
 場所: Theatre CYBIRD
 軽食も出るらしいですよ。 29