「.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
ビッグデータの可視化のプロダクト
詳細 †
Elasticsearch †
特長 †
- スケーラブル、スキーマレス、マルチテナント
- ドキュメントに対し高度な超高速全文検索が可能
用途 †
データ駆動型システム
ストア、ストレージ †
- 超高速全文検索に特化
- 1000万ドキュメント位まで1台で対応可能
- それ以上は、Hadoopで処理を行う。
- ES-Hadoopで、
- HadoopデータをElastic Stackにインデックスし、
- Elasticsearchエンジンで高速処理することも可能。
∴ NoSQLとしてみた場合、ドキュメント指向+分散処理系に近い。
Elastic Stack †
推奨のスタックみたいなもの
(Elasticsearch、Kibana、Logsatsh、Beats)。
Kibana †
JavaScript製の対話的な可視化ツール
Logsatsh †
汎用的なETLツール
Beats †
RDB との比較 †
設計方法 †
検討する必要がある。
Nodes, Shards, Replica †
- Nodes
- クラスタを構成する
- 下記のShardsが分散して配置される。
- Master node (Master eligible node)
・クラスタ情報を管理(Nodeの参加・離脱の管理、メタデータの更新、Shardsの割当)
・クラスタに1つのみ、 Master eligible node から動的に選出
- Data node
・document がindex されているshards を保持
・CRUD、検索、aggregation のようなデータ操作を実行
・デフォルトではすべての node が、Data node
- Ingest node
・インデックス前にドキュメントに前処理 パイプライン定義 を実行
・デフォルトではすべての node が、Ingest node
- Coordinating node (Coordinating only node)
・リクエストのルーティング、検索・集計処理の取り纏め
・Coordinating node と Kibana node の同居を推奨
・すべての node が、Coordinating node(無効にできない)
- Machine learning node
・有償オプション
・機械学習
- Transform node
・有償オプション
・インデックスを変換するノード
- Remote_Cluster_Client
・他のクラスタへの単方向接続
・デフォルトでは有効のため、外部接続を制限する場合は無効に設定
- Shards
クラスタ内で分散配置できるようにインデックスを分割した単位
- Indexが論理的な概念とすると、Shard は物理的な概念
- ≒ Luceneの1インスタンス
- Node を増やせば Shard が自動で再配置(スケールアウト)される
- Primary Shard
- 書き込み可能
- 数は Index 作成時に固定
- Replica Shard と同じ Node には配置されない。
- Replica Shard
- 読み取り専用
- 数はいつでも変更できる。
- Primary Shard と同じ Node には配置されない。
Indices †
- 1つの Index に対
- するデータ量や書き込み速度を分散できる。
- して、書き込み可能な Shards の数を変更できない。
- 親子関連のデータは別の Index にはできない
Type で分けで、
- 親子関連のデータとして Index するか、
- 1つのドキュメント内に Nested Type 型のデータとして Index するのか
のどちらか。
- 運用要件
- 複数の Index に同じ名前の Alias をつけることができる。
- 事前に新しい Index を作成し、公開したいタイミングでその情報を検索結果に反映できる。
- 多言語対応
- Index レベルで分ける。
- Type レベルで分ける。
- Document の属性に lang を用意する。
- データ・スキーマが異なるだけの場合
- Index レベルで分ける。
- Type レベルで分ける。
Types †
※ v6 以降では、Type指定が非推奨に。タイプ名の代わりに「_doc」を指定。
Documents †
JSON形式のデータ
Fields †
JSON形式のデータ中のキー
検索処理の概要 †
サーチ API †
- バリエーション
- index, typeは、[,]区切りで列挙可能。
- [*]をワイルドカードで使用可能。
- index, typeに、_allを指定可能。
- Alias
index名には Alias を使用可能。
- ページング
- size: 1度に検索結果を取得する数
- from: スキップする検索結果数
Mapping、Analysis、Query DSL †
- Mapping
全文検索のindex生成
- どのフィールドが文字列、数値、日付、geolocationか?
- 文字列フィールド:全文検索の対象か?
- 日付フィールド:日付の形式は?
- _all フィールドをインデックス化するかどうか?
- 動的に追加されるフィールドのマッピング
- Analysis
言語処理や正規化などフィールドの値の加工について
- Query DSL
JSON フォーマットによる検索条件の組み立て
Apache Lucene †
ドキュメント登録にはXML、JSONなどを使用
全文検索 †
正確かつ効率的な検索アルゴリズム
- クエリ
- 多数のクエリタイプ
- クエリ式の構文解析、誤字補完機能
- カスタムソート、フィルタリング
- スコアリング、ランキング
- 検索結果のハイライト機能
- RESTライクAPI
アナライザ †
- 文書の索引付けと検索
- 転置索引方式の採用
- 形態素解析とN-gramによる単語切出
性能 †
1時間に150GB以上のインデックススループット/ランク付け処理
ECS †
ECS : Elastic Common Schema
- Elasticsearchにデータ投入するための新しい仕様基準
- 共通フィールドセットとネーミングのガイドラインを定義
- データを一貫した方法で構造化し、カスタマイズにも対応する。
- 以下の様々なケースでECSが生産性と性能をエンハンスする。
- ユーザがデータを検索するケース
- Kibanaでデータを調査するケース
- 機械学習ジョブを構成するケース
- アラート機能を設定するケース
参考 †
Wikipedia †
Elastic †
Qiita †
Elasticsearch †
Elastic Stack †
Developers.IO †