.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

ビッグデータの可視化のプロダクト

詳細

Elasticsearch

特長

  • スケーラブル、スキーマレス、マルチテナント
  • ドキュメントに対し高度な超高速全文検索が可能

用途

データ駆動型システム

  • 未来予測
  • 意思決定
  • 企画立案

ストア、ストレージ

  • エンジン
  • ドキュメントを保存・検索
  • 超高速全文検索に特化
    • 1000万ドキュメント位まで1台で対応可能
    • それ以上は、Hadoopで処理を行う。
  • Elasticsearchは、
  • 単体で分散処理も可能。
  • ES-Hadoopで、
    • HadoopデータをElastic Stackにインデックスし、
    • Elasticsearchエンジンで高速処理することも可能。

NoSQLとしてみた場合、ドキュメント指向+分散処理系に近い

Elastic Stack

推奨のスタックみたいなもの
ElasticsearchKibanaLogsatshBeats)。

Kibana

JavaScript製の対話的な可視化ツール

Logsatsh

汎用的なETLツール

Beats

  • Goで開発された
    軽量データ収集ツール
  • ECS準拠
    • 自動構文解析機能付き
    • 自動データマッピング(Elasticsearch
    • 自動Dashboard生成(Kibana

RDB との比較

RDBElasticsearch
DatabasesIndices
TablesTypes
RowsDocuments
ColumnsFields

設計方法

検討する必要がある。

Nodes, Shards, Replica

  • Nodes
    • クラスタを構成する
    • 下記のShardsが分散して配置される。
  • Nodeの種類
  • 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 レベルで分ける。
  • Tribe Node で重複しない名称付与

Types

※ v6 以降では、Type指定が非推奨に。タイプ名の代わりに「_doc」を指定。

Documents

JSON形式のデータ

Fields

JSON形式のデータ中のキー

検索処理の概要

サーチ API

  • indexまで指定
    GET|POST /{index}/_search
  • typeまで指定
    GET|POST /{index}/{type}/_search
  • バリエーション
    • 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

  • オープンソースのElastic Stack
    (Elasticsearch、Kibana、Beats、Logsatsh)
    でリアルタイムな検索と分析
    https://www.elastic.co/jp/

Qiita

Elasticsearch

Elastic Stack

Developers.IO


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2020-10-27 (火) 14:02:40 (2d)