elasticsearch 2014/04/21 勉強会資料 「couchbase と elasticsearch が手を結んだら」
DESCRIPTION
Elasticsearch 2014/04/21 勉強会資料 「CouchbaseとElasticsearchが手を結んだら」TRANSCRIPT
CouchbaseとElasticsearchが 手を結んだら
第4回Elasticsearch勉強会
自己紹介(佐竹雅央)
さたけまさひろ
株式会社アットウェア
横浜 みなとみらい
Java/Solr/Elasticsearch/Neo4j/Couchbase
@madgaoh
自己紹介(河村康爾)
かわむらこうじ
株式会社アットウェア
couchbase-jp
コミュニティーリーダ
Java/Node.js/Ruby/Couchbase/Hadoop
@ijokarumawak
Couchbase Server
• ドキュメント型NoSQLデータベース
– Membase (memcachedサーバ)
– Apache CouchDB (jsonドキュメント型KVS)
–をベースに作られている
• ヒトコトでいうと
–永続化されて動的なスケールアウトも容易で高可用性に優れたmemcachedサーバ
Couchbase Server の特徴
• メモリ+ストレージのハイブリッド・キーバリューストア – オンメモリで高速に入出力しつつ永続化もされる
• 扱うデータはJSON形式でスキーマレス • 最初からスケールアウト前提の分散型設計 • TTLを指定してデータ有効期限を設定可能 • HTTP RestAPIでノード管理が可能
ただし • 現状、データ横断的な処理は苦手
– ViewIndex機能など、無いわけではない – NoSQL版SQL機能の追加を予定はしているが
Couchbase Server の特徴
• メモリ+ストレージのハイブリッド・キーバリューストア – オンメモリで高速に入出力しつつ永続化もされる
• 扱うデータはJSON形式でスキーマレス • 最初からスケールアウト前提の分散型設計 • TTLを指定してデータ有効期限を設定可能 • HTTP RestAPIでノード管理が可能
ただし • 現状、データ横断的な処理は苦手
– ViewIndex機能など、無いわけではない – NoSQL版SQL機能の追加を予定はしているが
そこでElasticsearch! 検索・ファセット・統計
Elasticsearchと同じ!
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)
PlugIn 基本動作(1)
• PluginがCouchbaseのXDCRのプロトコルをエミュレートするJettyサーバを起動 – CouchbaseからはElasticsearchのindexがBucket(Couchbaseにおけるデータ格納容器の単位)であるように見える
– indexのconfigはPluginの提供するtemplateを使用
CB
ES Plugin
Index A’ Bucket A’ Bucket A
PlugIn 基本動作(2)
• XDCR機能を使って継続的にデータを同期
–同期管理の為の情報が特定type名のドキュメントとしてElasticsearch側に登録されるので注意。
• デフォルトでは “couchbaseCheckpoint”
CB Plugin
ES
Index A’ Bucket A’ Bucket A XDCR
(cross datacenter replication)
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)
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)
DEMO
夢を語ろう ※妄想
• RDB: データの一貫性、既存のフレームワークが豊富、プライマリデータベースとしては権威
• Cache: オブジェクトのツリー構造は、RDBの複雑なJOIN結果から復元する必要あり。参照性能の改善にMemcachedなどやRedisが利用されるケースが多い
• 全文検索: システムに保存した文書情報を単語レベルで検索できると便利、Googleの様に
RDBのキャッシュとしての利用からのアーキテクチャを考えてみる
RDB 管理用
WebApp
RESTful API
CRUD
Cache Store Fetch
XDCR
Read
Read / Write
Full Text Search!
RDB, CB, ESの組合せの一つとして、サンプルですから
ロシアンドールキャッシュ
http://commons.wikimedia.org/wiki/File:Floral_matryoshka_set_1.JPG
今回のサンプルRailsアプリではRussian doll (key based caching)の流れを利用
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/
気を付けたい所(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のインターバルで実施されるので厳密ではない。
ちなみに
現在のElasticsearchでは
• 外部からElasticsearchにデータを流しこむPluginを「River Plugin」
• Elasticsearchから外部にデータを転送するPluginを「Transport Plugin」
として統一、APIも整備しているようなので、Elasticsearch側に乗るPluginでありながらelasticsearch-transport-couchbaseと名乗るこのプラグインはちょっと遅れてる感がある。
だからなのか、サイトのプラグイン一覧からも居なくなった・・・
ちょっと足りない
• うちではこんな拡張してます – 複数のTypeに適宜マッピングする
– JSONデータを一部書き換える/構造変換する
– 検索結果表示用の共通スキーマを作ってその部分はソースを残す
– 独自のTokenizerで包摂処理などもしているのでElasticsearch側でHighlightingまではさせたい(_sourceかstoredが必要)
– Headプラグインを拡張してCouchbaseのデータを覗く
• GitHubで一部公開してます
皆さんログ解析の方がお好き?
20
おわり
ご清聴ありがとうございました
株式会社アットウェア
新卒・中途採用技術者 募集中です!
夏休みのインターン生も募集中です!
http://atware.co.jp/
http://atwarerecruit.tumblr.com/