「[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfrastructure.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -戻る --[[NoSQL]] > [[ドキュメント指向型>NoSQL - ドキュメント指向型]] --[[分散処理]] *目次 [#z15c23bb] #contents *概要 [#kb1b2908] ビッグデータの可視化のプロダクト *詳細 [#x66435b3] **Elasticsearch [#xeeae7a8] ***特長 [#qcdfb1f2] -スケーラブル、スキーマレス、マルチテナント -ドキュメントに対し高度な超高速全文検索が可能 ***用途 [#wb866e22] データ駆動型システム -未来予測 -意思決定 -企画立案 ***ストア、ストレージ [#i438cfb0] -エンジン --[[Apache Lucene(全文検索)>#g5b90cbe]] --ドキュメントを保存・検索 --超高速全文検索に特化 ---1000万ドキュメント位まで1台で対応可能 ---それ以上は、[[Hadoop]]で処理を行う。 -Elasticsearchは、 --単体で分散処理も可能。 --ES-Hadoopで、 ---HadoopデータをElastic Stackにインデックスし、 ---Elasticsearchエンジンで高速処理することも可能。 >∴ [[NoSQLとしてみた場合、ドキュメント指向+分散処理系に近い>NoSQL#rf480bb4]]。 **Elastic Stack [#r521f91b] 推奨のスタックみたいなもの~ ([[Elasticsearch>#xeeae7a8]]、[[Kibana>#xdb2a250]]、[[Logsatsh>#h0b258a7]]、[[Beats>#h15c1264]])。 ***Kibana [#xdb2a250] JavaScript製の対話的な可視化ツール ***Logsatsh [#h0b258a7] 汎用的な[[ETL>EAI/ETL#eed58b6f]]ツール ***Beats [#h15c1264] -[[Elastic Stack>#r521f91b]]専用感 -Goで開発された~ 軽量データ収集ツール -[[ECS>#r62e8607]]準拠 --自動構文解析機能付き --自動データマッピング([[Elasticsearch>#xeeae7a8]]) --自動Dashboard生成([[Kibana>#xdb2a250]]) **RDB との比較 [#a377a192] |RDB|Elasticsearch|h |Databases|[[Indices>#u24be7b1]]| |Tables|[[Types>#j4b96bde]]| |Rows|[[Documents>#jc568f72]]| |Columns|[[Fields>#xbc2e352]]| ***設計方法 [#q92b50e4] -[[Nodes, Shards, Replica>#f34c97b1]] -[[Indices>#u24be7b1]]レベルで分けるのか、[[Types>#j4b96bde]]で分けるのか、 検討する必要がある。 ***Nodes, Shards, Replica [#f34c97b1] -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>#g5b90cbe]]の1インスタンス --Node を増やせば Shard が自動で再配置(スケールアウト)される -Primary Shard --書き込み可能 --数は Index 作成時に固定 --Replica Shard と同じ Node には配置されない。 -Replica Shard --読み取り専用 --数はいつでも変更できる。 --Primary Shard と同じ Node には配置されない。 -参考 --Elasticsearchクラスタで必要なシャード数、ノード数を計算する - CLOVER🍀~ https://kazuhira-r.hatenablog.com/entry/2020/01/02/182732 ***Indices [#u24be7b1] -データ量や更新頻度に対する考慮 --複数の [[Shards>#f34c97b1]] から構成される。 --[[Shards>#f34c97b1]] を [[Nodes>#f34c97b1]] に分散する。 --1つの Index に対 ---するデータ量や書き込み速度を分散できる。 ---して、書き込み可能な [[Shards>#f34c97b1]] の数を変更できない。 --親子関連のデータは別の Index にはできない [[Type>#j4b96bde]] で分けで、 ---親子関連のデータとして Index するか、 ---1つのドキュメント内に Nested [[Type>#j4b96bde]] 型のデータとして Index するのか >のどちらか。 -運用要件 --複数の Index に同じ名前の Alias をつけることができる。 --事前に新しい Index を作成し、公開したいタイミングでその情報を検索結果に反映できる。 -多言語対応 --Index レベルで分ける。 --Type レベルで分ける。 --Document の属性に lang を用意する。 -データ・スキーマが異なるだけの場合 --Index レベルで分ける。 --Type レベルで分ける。 -Tribe Node で重複しない名称付与 ***Types [#j4b96bde] ※ v6 以降では、Type指定が非推奨に。タイプ名の代わりに「_doc」を指定。 ***Documents [#jc568f72] JSON形式のデータ ***Fields [#xbc2e352] JSON形式のデータ中のキー **検索処理の概要 [#tef1cf42] ***サーチ API [#z878230e] -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 [#a0374c2c] -Mapping~ [[全文検索>#i3421c0a]]のindex生成 --どのフィールドが文字列、数値、日付、geolocationか? ---文字列フィールド:全文検索の対象か? ---日付フィールド:日付の形式は? --_all フィールドをインデックス化するかどうか? --動的に追加されるフィールドのマッピング -Analysis~ 言語処理や正規化などフィールドの値の加工について -Query DSL~ JSON フォーマットによる検索条件の組み立て **Apache Lucene [#g5b90cbe] ドキュメント登録にはXML、JSONなどを使用 ***全文検索 [#i3421c0a] 正確かつ効率的な検索アルゴリズム -[[テキスト分析>#l79ecf84]] -クエリ --多数のクエリタイプ --クエリ式の構文解析、誤字補完機能 --カスタムソート、フィルタリング -スコアリング、ランキング --Lucene's Practical Scoring Function --[[BM25>言語処理(AI) #vade3462]]の様な[[TF-IDF>言語処理(AI) #hdbd22d6]]の進化系 --[[BM25>言語処理(AI)#vade3462]]の様な[[TF-IDF>言語処理(AI)#hdbd22d6]]の進化系 -検索結果のハイライト機能 -RESTライクAPI ***アナライザ [#l79ecf84] -文書の索引付けと検索 --転置索引方式の採用 --[[形態素解析とN-gram>言語処理]]による単語切出 -参考 --Apache Lucene入門 - RONDHUIT~ https://www.rondhuit.com/lucene-for-bea-060710.pdf ***性能 [#q8792dbc] 1時間に150GB以上のインデックススループット/ランク付け処理 **ECS [#r62e8607] ECS : Elastic Common Schema -Elasticsearchにデータ投入するための新しい仕様基準 --共通フィールドセットとネーミングのガイドラインを定義 --データを一貫した方法で構造化し、カスタマイズにも対応する。 -以下の様々なケースでECSが生産性と性能をエンハンスする。 --ユーザがデータを検索するケース --Kibanaでデータを調査するケース --機械学習ジョブを構成するケース --アラート機能を設定するケース *参考 [#d0e8b5a7] -効率的なPDCAのカギはストリーミングデータの可視化!|株式会社オロ~ https://www.oro.com/ja/technology/005/ -楽しい可視化 : elasticsearchとSpark Streamingの出会い | NTTデータ先端技術株式会社~ http://www.intellilink.co.jp/article/column/bigdata-kk02.html **Wikipedia [#xcd4aa53] -Elasticsearch~ https://ja.wikipedia.org/wiki/Elasticsearch -Apache Lucene~ https://ja.wikipedia.org/wiki/Apache_Lucene **Elastic [#v73c3baa] -Elasticsearch | 分散型RESTful検索/分析エンジン~ https://www.elastic.co/jp/products/elasticsearch -Elasticsearch for Hadoop~ https://www.elastic.co/jp/what-is/elasticsearch-hadoop -オープンソースのElastic Stack~ (Elasticsearch、Kibana、Beats、Logsatsh)~ でリアルタイムな検索と分析~ https://www.elastic.co/jp/ **Qiita [#ffe93902] ***Elasticsearch [#i4d2b5e3] -はじめての Elasticsearch~ https://qiita.com/nskydiving/items/1c2dc4e0b9c98d164329 -3分で分かった気になる、Elasticsearchとは?~ https://qiita.com/r548/items/3622048a622d9c0acc05 -Elasticsearch 超入門~ https://qiita.com/kws9/items/7695262be0befb94897f -Kibanaで簡単! サクサク ビジュアライズしよう!~ https://qiita.com/kitfactory/items/9c2f990d87e33fab828a -データベースとしてのElasticsearch~ https://qiita.com/rjkuro/items/95f71ad522226dc381c8 ***Elastic Stack [#v0e2cb1f] -Elastic Stackについて~ https://qiita.com/gitya107/items/1dc7cb98a5d7d583a684 **Developers.IO [#a0c52d94] -Elasticsearch入門 | シリーズ~ https://dev.classmethod.jp/series/enter-elasticsearch/ --第1回 インデックスを設計する際に知っておくべき事~ https://dev.classmethod.jp/server-side/elasticsearch-getting-started-01/ --第2回 データスキーマ設計のいろは~ https://dev.classmethod.jp/server-side/elasticsearch-getting-started-02/ --第3回 ドキュメント管理は意外と高度なことができる~ https://dev.classmethod.jp/server-side/elasticsearch-getting-started-03/ --第4回 検索の基本中の基本~ https://dev.classmethod.jp/server-side/elasticsearch-getting-started-04/ --第5回 Elasticsearch の使いどころ~ https://dev.classmethod.jp/server-side/elasticsearch-getting-started-05/ --第6回 基本コンセプトを理解する~ https://dev.classmethod.jp/server-side/elasticsearch-getting-started-06/ --第7回 API の使い方をハンズオンで理解する 〜前編〜~ https://dev.classmethod.jp/server-side/elasticsearch-getting-started-07/ --第8回 API の使い方をハンズオンで理解する 〜後編〜~ https://dev.classmethod.jp/server-side/elasticsearch-getting-started-08/