Elasticsearch 2014/04/21 勉強会資料 「Couchbase と Elasticsearch が手を結んだら」

3,593 views

Published on

Elasticsearch 2014/04/21 勉強会資料
「CouchbaseとElasticsearchが手を結んだら」

Published in: Technology
1 Comment
3 Likes
Statistics
Notes
No Downloads
Views
Total views
3,593
On SlideShare
0
From Embeds
0
Number of Embeds
1,482
Actions
Shares
0
Downloads
23
Comments
1
Likes
3
Embeds 0
No embeds

No notes for slide

Elasticsearch 2014/04/21 勉強会資料 「Couchbase と Elasticsearch が手を結んだら」

  1. 1. CouchbaseとElasticsearchが 手を結んだら 第4回Elasticsearch勉強会
  2. 2. 自己紹介(佐竹雅央) さたけまさひろ  株式会社アットウェア  横浜 みなとみらい  Java/Solr/Elasticsear ch/Neo4j/Couchbase  @madgaoh
  3. 3. 自己紹介(河村康爾) かわむらこうじ  株式会社アットウェア  couchbase-jp コミュニティーリーダ  Java/Node.js/Ruby/ Couchbase/Hadoop  @ijokarumawak
  4. 4. Couchbase Server • ドキュメント型NoSQLデータベース – Membase (memcachedサーバ) – Apache CouchDB (jsonドキュメント型KVS) – をベースに作られている • ヒトコトでいうと – 永続化されて動的なスケールアウトも容易で高 可用性に優れたmemcachedサーバ
  5. 5. Couchbase Server の特徴 • メモリ+ストレージのハイブリッド・キーバリューストア – オンメモリで高速に入出力しつつ永続化もされる • 扱うデータはJSON形式でスキーマレス • 最初からスケールアウト前提の分散型設計 • TTLを指定してデータ有効期限を設定可能 • HTTP RestAPIでノード管理が可能 ただし • 現状、データ横断的な処理は苦手 – ViewIndex機能など、無いわけではない – NoSQL版SQL機能の追加を予定はしているが
  6. 6. Couchbase Server の特徴 • メモリ+ストレージのハイブリッド・キーバリューストア – オンメモリで高速に入出力しつつ永続化もされる • 扱うデータはJSON形式でスキーマレス • 最初からスケールアウト前提の分散型設計 • TTLを指定してデータ有効期限を設定可能 • HTTP RestAPIでノード管理が可能 ただし • 現状、データ横断的な処理は苦手 – ViewIndex機能など、無いわけではない – NoSQL版SQL機能の追加を予定はしているがそこでElasticsearch! 検索・ファセット・統計 Elasticsearchと同じ!
  7. 7. CouchbaseとElasticsearchの連携 • Couchbase Plug-in for Elasticsearch http://docs.couchbase.com/couchbase-elastic-search/ https://github.com/couchbaselabs/elasticsearch-transport-couchbase CouchbaseのXDCR機能を利用したElasticsearchへの更新データ同期のPlugin CB Plugin ES Index A’Bucket A’Bucket A XDCR (cross datacenter replication)
  8. 8. PlugIn 基本動作(1) • PluginがCouchbaseのXDCRのプロトコルをエミュ レートするJettyサーバを起動 – CouchbaseからはElasticsearchのindexがBucket (Couchbaseにおけるデータ格納容器の単位)である ように見える – indexのconfigはPluginの提供するtemplateを使用 CB ESPlugin Index A’Bucket A’Bucket A
  9. 9. PlugIn 基本動作(2) • XDCR機能を使って継続的にデータを同期 – 同期管理の為の情報が特定type名のドキュメント としてElasticsearch側に登録されるので注意。 • デフォルトでは “couchbaseCheckpoint” CB Plugin ES Index A’Bucket A’Bucket A XDCR (cross datacenter replication)
  10. 10. PlugIn 基本動作(3) • CBでの「id(+rev)→body(JSON形式)」が type/id→{ meta:{id, rev}, doc:body} と変換されて登 録される – Typeは固定 • 設定ファイルで指定、デフォルトでは ”couchbaseDocument” CB Plugin ES Index A’Bucket A Bucket A’ XDCR (cross datacenter replication)
  11. 11. PlugIn 基本動作(3’) • CBでの「id(+rev)→body(JSON形式)」が type/id→{ meta:{id, rev}, doc:body} と変換されて登 録される – Typeは固定 • 設定ファイルで指定、デフォルトでは ”couchbaseDocument” CB上Bucket Aのドキュメント ( id=doc-id, rev=2-00007bc51cded2650000000000000002) ES上Index A’のドキュメント (type=couchbaseDocument, id=doc-id)
  12. 12. DEMO
  13. 13. 夢を語ろう ※妄想 • RDB: データの一貫性、既存のフレームワー クが豊富、プライマリデータベースとしては 権威 • Cache: オブジェクトのツリー構造は、RDBの 複雑なJOIN結果から復元する必要あり。参 照性能の改善にMemcachedなどやRedisが 利用されるケースが多い • 全文検索: システムに保存した文書情報を 単語レベルで検索できると便利、Googleの 様に
  14. 14. RDBのキャッシュとしての利用からの アーキテクチャを考えてみる RDB 管理用 WebApp RESTful API CRUD Cache Store Fetch XDCR Read Read / Write Full Text Search! RDB, CB, ESの組合せの一つとして、サンプルですから
  15. 15. ロシアンドールキャッシュ http://commons.wikimedia.org/wiki/File:Floral_matryoshka_set_1.JPG 今回のサンプルRailsアプリではRussian doll (key based caching)の流れを利用
  16. 16. DEMOの流れ • Elasticsearchサーバ構築+Pluginのinstall • templateの登録とindex作成 • XDCRの開始 – (プロトコルはVersion1、パラメータに注意) • XDCRの処理完了を管理コンソールで確認 • ESのHeadプラグインで確認 – (ただしdocはstoreされない) • Couchbaseデータ更新 → XDCRで即反映 • ESのHeadプラグインで確認 – (ただしry) • 詳細な手順はWebを参照: – http://docs.couchbase.com/couchbase-elastic-search/
  17. 17. 気を付けたい所(DEMO) • ES 1.0.0 対応版はまだmasterにしか無いのでgithubからDL(clone) して自分でビルドが必要。 – 依存している couchbase-capi-server も同じくgithubから入手してbuild • 初回同期時、Couchbaseに既に大量のデータがある場合だと、 XDCRの設定で流量を絞らないとElasticsearch側が処理追いつかず、 無駄にタイムアウト→リトライを繰り返す羽目になります(リトライし てる分にはいずれ入りますが非効率) – XDCR Max Replications per Bucket を減らす • 余りにも貧弱な検証環境ではElasticsearchの処理Queueが溢れる – Elasticsearch側でQueueサイズを変更する • threadpool.bulk.queue_size • TTLを同期する場合はElasticsearchのTTL機能(デフォルトOFF)を ONにすること。またElasticsearchのTTLはデフォルト60sのインター バルで実施されるので厳密ではない。
  18. 18. ちなみに 現在のElasticsearchでは • 外部からElasticsearchにデータを流しこむ Pluginを「River Plugin」 • Elasticsearchから外部にデータを転送する Pluginを「Transport Plugin」 として統一、APIも整備しているようなので、 Elasticsearch側に乗るPluginでありながらelasticsearch-transport- couchbaseと名乗るこのプラグインはちょっと遅れてる感がある。 だからなのか、サイトのプラグイン一覧からも居なくなった・・・
  19. 19. ちょっと足りない • うちではこんな拡張してます – 複数のTypeに適宜マッピングする – JSONデータを一部書き換える/構造変換する – 検索結果表示用の共通スキーマを作ってその部分 はソースを残す – 独自のTokenizerで包摂処理などもしているので Elasticsearch側でHighlightingまではさせたい(_source かstoredが必要) – Headプラグインを拡張してCouchbaseのデータを覗く • GitHubで一部公開してます
  20. 20. 皆さんログ解析の方がお好き? 20
  21. 21. おわり ご清聴ありがとうございました
  22. 22. 株式会社アットウェア 新卒・中途採用技術者 募集中です! 夏休みのインターン生も募集中です! http://atware.co.jp/ http://atwarerecruit.tumblr.com/

×