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

22
CouchbaseElasticsearch手を結んだら 4Elasticsearch勉強会

Upload: masahiro-satake

Post on 27-Jun-2015

2.257 views

Category:

Technology


4 download

DESCRIPTION

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

TRANSCRIPT

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

CouchbaseとElasticsearchが 手を結んだら

第4回Elasticsearch勉強会

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

自己紹介(佐竹雅央)

さたけまさひろ

株式会社アットウェア

横浜 みなとみらい

Java/Solr/Elasticsearch/Neo4j/Couchbase

@madgaoh

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

自己紹介(河村康爾)

かわむらこうじ

株式会社アットウェア

couchbase-jp

コミュニティーリーダ

Java/Node.js/Ruby/Couchbase/Hadoop

@ijokarumawak

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

Couchbase Server

• ドキュメント型NoSQLデータベース

– Membase (memcachedサーバ)

– Apache CouchDB (jsonドキュメント型KVS)

–をベースに作られている

• ヒトコトでいうと

–永続化されて動的なスケールアウトも容易で高可用性に優れたmemcachedサーバ

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

Couchbase Server の特徴

• メモリ+ストレージのハイブリッド・キーバリューストア – オンメモリで高速に入出力しつつ永続化もされる

• 扱うデータはJSON形式でスキーマレス • 最初からスケールアウト前提の分散型設計 • TTLを指定してデータ有効期限を設定可能 • HTTP RestAPIでノード管理が可能

ただし • 現状、データ横断的な処理は苦手

– ViewIndex機能など、無いわけではない – NoSQL版SQL機能の追加を予定はしているが

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

Couchbase Server の特徴

• メモリ+ストレージのハイブリッド・キーバリューストア – オンメモリで高速に入出力しつつ永続化もされる

• 扱うデータはJSON形式でスキーマレス • 最初からスケールアウト前提の分散型設計 • TTLを指定してデータ有効期限を設定可能 • HTTP RestAPIでノード管理が可能

ただし • 現状、データ横断的な処理は苦手

– ViewIndex機能など、無いわけではない – NoSQL版SQL機能の追加を予定はしているが

そこでElasticsearch! 検索・ファセット・統計

Elasticsearchと同じ!

Page 7: Elasticsearch 2014/04/21 勉強会資料 「Couchbase と 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)

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

PlugIn 基本動作(1)

• PluginがCouchbaseのXDCRのプロトコルをエミュレートするJettyサーバを起動 – CouchbaseからはElasticsearchのindexがBucket(Couchbaseにおけるデータ格納容器の単位)であるように見える

– indexのconfigはPluginの提供するtemplateを使用

CB

ES Plugin

Index A’ Bucket A’ Bucket A

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

PlugIn 基本動作(2)

• XDCR機能を使って継続的にデータを同期

–同期管理の為の情報が特定type名のドキュメントとしてElasticsearch側に登録されるので注意。

• デフォルトでは “couchbaseCheckpoint”

CB Plugin

ES

Index A’ Bucket A’ Bucket A XDCR

(cross datacenter replication)

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

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)

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

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)

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

DEMO

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

夢を語ろう ※妄想

• RDB: データの一貫性、既存のフレームワークが豊富、プライマリデータベースとしては権威

• Cache: オブジェクトのツリー構造は、RDBの複雑なJOIN結果から復元する必要あり。参照性能の改善にMemcachedなどやRedisが利用されるケースが多い

• 全文検索: システムに保存した文書情報を単語レベルで検索できると便利、Googleの様に

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

RDBのキャッシュとしての利用からのアーキテクチャを考えてみる

RDB 管理用

WebApp

RESTful API

CRUD

Cache Store Fetch

XDCR

Read

Read / Write

Full Text Search!

RDB, CB, ESの組合せの一つとして、サンプルですから

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

ロシアンドールキャッシュ

http://commons.wikimedia.org/wiki/File:Floral_matryoshka_set_1.JPG

今回のサンプルRailsアプリではRussian doll (key based caching)の流れを利用

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

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/

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

気を付けたい所(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のインターバルで実施されるので厳密ではない。

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

ちなみに

現在のElasticsearchでは

• 外部からElasticsearchにデータを流しこむPluginを「River Plugin」

• Elasticsearchから外部にデータを転送するPluginを「Transport Plugin」

として統一、APIも整備しているようなので、Elasticsearch側に乗るPluginでありながらelasticsearch-transport-couchbaseと名乗るこのプラグインはちょっと遅れてる感がある。

だからなのか、サイトのプラグイン一覧からも居なくなった・・・

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

ちょっと足りない

• うちではこんな拡張してます – 複数のTypeに適宜マッピングする

– JSONデータを一部書き換える/構造変換する

– 検索結果表示用の共通スキーマを作ってその部分はソースを残す

– 独自のTokenizerで包摂処理などもしているのでElasticsearch側でHighlightingまではさせたい(_sourceかstoredが必要)

– Headプラグインを拡張してCouchbaseのデータを覗く

• GitHubで一部公開してます

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

皆さんログ解析の方がお好き?

20

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

おわり

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

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

株式会社アットウェア

新卒・中途採用技術者 募集中です!

夏休みのインターン生も募集中です!

http://atware.co.jp/

http://atwarerecruit.tumblr.com/