Elastic searchにおける並列重合アルゴリズム,三角選択原則,近似重合アルゴリズムの浅い分析
1、いくつかの集約分析のアルゴリズムは、簡単に並列することができます.例えばmax
いくつかの集約分析のアルゴリズムは、並列にはできません.例えば、count(distinct)は、nodeごとにdistinct valueを直接出せばいいわけではありません.データが多い可能性があるからです.
Esは近似重合方式を採用し、nodeごとに近似推定を行う方式を採用し、最終的な結論を得る.cuont(distcint)は、5%程度の誤り率がある可能性があり、近似推定後の結果は、完全に正確ではないが、速度は速く、一般的に完全に正確なアルゴリズムの性能の数十倍に達する.
2、三角選択の原則
精確+リアルタイム+ビッグデータ-->2個選択
(1)精確+リアルタイム:ビッグデータがなく、データ量が小さく、普通は単機で走る.(2)精確+ビッグデータ:hadoop、バッチ処理、非リアルタイム、大量のデータを処理することができ、精確を保証し、数時間走る可能性がある.(3)ビッグデータ+リアルタイム:es、不正確、近似推定、数パーセントの誤り率がある可能性がある;
3、近似集約アルゴリズム
近似推定アルゴリズムを採用すれば、遅延は100 ms程度で、0.5%エラーである.100%正確なアルゴリズムを採用すれば、遅延は一般的に5 s~数十s、甚だしきに至っては数十分、数時間であるが、0%の誤りである.
4、esでの再操作;
cartinality metricを使用して、各bucketで指定されたfieldをデポジットし、デポジット後のcountをcount(distcint)と同様に取ります.
5、cardinality,count(distinct)、5%の誤り率、性能は100 ms程度
利用precision_threshold最適化精度とメモリオーバーヘッド
どれくらいのpricision_threshold個unique value以内、cardinality、ほぼ100%正確を保証、cardinalityアルゴリズム、precision_を占有するthreshold*8 byteメモリ消費量、100*8=800バイト、メモリ消費量が小さい...またunique valueが確かに値以内であれば,100%正確100,数百万のunique value,誤り率5%以内を確保できる.
2、HyperLogLog++(HLL)アルゴリズム性能最適化
cardinality下位アルゴリズム:HLLアルゴリズム、HLLアルゴリズムの性能
すべてのuqniue valueに対してhash値を取って、hash値の近似を通じてdistcint countを求めて、誤差
デフォルトでは、cardinalityリクエストを送信すると、すべてのfield valueに対してhash値が動的に取得されます.hash値を取る操作をインデックスが作成されるまで前に移動します.
3、_percentilesパーセントアルゴリズムおよびWebサイトアクセス遅延統計
リクエストされるたびのアクセス時間を記録したサイトがあり、tp 50,tp 90,tp 99を統計する必要があります.
tp 50:50%のリクエストの消費時間が最長でどれくらいの時間tp 90:90%のリクエストの消費時間が最長でどれくらいの時間tp 99:99%のリクエストの消費時間が最長でどれくらいの時間
各省のtp 50,tp 90,tp 99を統一する
4、_percentiles rankおよびWebサイトアクセス遅延SLA統計
需要:200 ms以内のもの、1000ミリ秒以内のもの、percentile ranks metric
需要:ブランドによってグループ分けして、計算して、テレビ、価格は1000で比を占めて、2000は比を占めて、3000は比を占めます
percentileの最適化:percentileはTDigestアルゴリズムを使用し、多くのノードでパーセンテージの計算を実行し、近似推定、誤差があり、ノードが多ければ多いほど正確になる.
パラメータcompressionを使用して、ノードの数を制限することができます最大compression*20=2000個のnodeを計算して、デフォルトの100、数が大きいほど、メモリの使用量が多くなり、正確であればあるほど、性能が悪くなり、1つのノードは32バイトを使用して、100*20*32=64 KBを使用して、percentileアルゴリズムが正確であればあるほど、compressionは設定することができます.
いくつかの集約分析のアルゴリズムは、並列にはできません.例えば、count(distinct)は、nodeごとにdistinct valueを直接出せばいいわけではありません.データが多い可能性があるからです.
Esは近似重合方式を採用し、nodeごとに近似推定を行う方式を採用し、最終的な結論を得る.cuont(distcint)は、5%程度の誤り率がある可能性があり、近似推定後の結果は、完全に正確ではないが、速度は速く、一般的に完全に正確なアルゴリズムの性能の数十倍に達する.
2、三角選択の原則
精確+リアルタイム+ビッグデータ-->2個選択
(1)精確+リアルタイム:ビッグデータがなく、データ量が小さく、普通は単機で走る.(2)精確+ビッグデータ:hadoop、バッチ処理、非リアルタイム、大量のデータを処理することができ、精確を保証し、数時間走る可能性がある.(3)ビッグデータ+リアルタイム:es、不正確、近似推定、数パーセントの誤り率がある可能性がある;
3、近似集約アルゴリズム
近似推定アルゴリズムを採用すれば、遅延は100 ms程度で、0.5%エラーである.100%正確なアルゴリズムを採用すれば、遅延は一般的に5 s~数十s、甚だしきに至っては数十分、数時間であるが、0%の誤りである.
4、esでの再操作;
cartinality metricを使用して、各bucketで指定されたfieldをデポジットし、デポジット後のcountをcount(distcint)と同様に取ります.
GET /tvs/sales/_search
{
"size" : 0,
"aggs" : {
"months" : {
"date_histogram": {
"field": "sold_date",
"interval": "month"
},
"aggs": {
"distinct_colors" : {
"cardinality" : {
"field" : "brand"
}
}
}
}
}
}
5、cardinality,count(distinct)、5%の誤り率、性能は100 ms程度
利用precision_threshold最適化精度とメモリオーバーヘッド
GET /tvs/sales/_search
{
"size" : 0,
"aggs" : {
"distinct_brand" : {
"cardinality" : {
"field" : "brand",
"precision_threshold" : 100
}
}
}
}
どれくらいのpricision_threshold個unique value以内、cardinality、ほぼ100%正確を保証、cardinalityアルゴリズム、precision_を占有するthreshold*8 byteメモリ消費量、100*8=800バイト、メモリ消費量が小さい...またunique valueが確かに値以内であれば,100%正確100,数百万のunique value,誤り率5%以内を確保できる.
2、HyperLogLog++(HLL)アルゴリズム性能最適化
cardinality下位アルゴリズム:HLLアルゴリズム、HLLアルゴリズムの性能
すべてのuqniue valueに対してhash値を取って、hash値の近似を通じてdistcint countを求めて、誤差
デフォルトでは、cardinalityリクエストを送信すると、すべてのfield valueに対してhash値が動的に取得されます.hash値を取る操作をインデックスが作成されるまで前に移動します.
PUT /tvs/
{
"mappings": {
"sales": {
"properties": {
"brand": {
"type": "text",
"fields": {
"hash": {
"type": "murmur3"
}
}
}
}
}
}
}
GET /tvs/sales/_search
{
"size" : 0,
"aggs" : {
"distinct_brand" : {
"cardinality" : {
"field" : "brand.hash",
"precision_threshold" : 100
}
}
}
}
3、_percentilesパーセントアルゴリズムおよびWebサイトアクセス遅延統計
リクエストされるたびのアクセス時間を記録したサイトがあり、tp 50,tp 90,tp 99を統計する必要があります.
tp 50:50%のリクエストの消費時間が最長でどれくらいの時間tp 90:90%のリクエストの消費時間が最長でどれくらいの時間tp 99:99%のリクエストの消費時間が最長でどれくらいの時間
PUT /website
{
"mappings": {
"logs":{
"properties":{
"latency":{
"type":"long"
},
"province":{
"type":"keyword"
},
"timestamp":{
"type":"date"
}
}
}
}
}
POST /website/logs/_bulk
{ "index": {}}
{ "latency" : 105, "province" : " ", "timestamp" : "2016-10-28" }
{ "index": {}}
{ "latency" : 83, "province" : " ", "timestamp" : "2016-10-29" }
{ "index": {}}
{ "latency" : 92, "province" : " ", "timestamp" : "2016-10-29" }
{ "index": {}}
{ "latency" : 112, "province" : " ", "timestamp" : "2016-10-28" }
{ "index": {}}
{ "latency" : 68, "province" : " ", "timestamp" : "2016-10-28" }
{ "index": {}}
{ "latency" : 76, "province" : " ", "timestamp" : "2016-10-29" }
{ "index": {}}
{ "latency" : 101, "province" : " ", "timestamp" : "2016-10-28" }
{ "index": {}}
{ "latency" : 275, "province" : " ", "timestamp" : "2016-10-29" }
{ "index": {}}
{ "latency" : 166, "province" : " ", "timestamp" : "2016-10-29" }
{ "index": {}}
{ "latency" : 654, "province" : " ", "timestamp" : "2016-10-28" }
{ "index": {}}
{ "latency" : 389, "province" : " ", "timestamp" : "2016-10-28" }
{ "index": {}}
{ "latency" : 302, "province" : " ", "timestamp" : "2016-10-29" }
GET /website/logs/_search
{
"size": 0,
"aggs": {
"latency_properties": {
"percentiles": {
"field": "latency",
"percents": [
50,
95,
99
]
}
},
"latency_avg":{
"avg": {
"field": "latency"
}
}
}
}
各省のtp 50,tp 90,tp 99を統一する
GET /website/logs/_search
{
"size": 0,
"aggs": {
"group_by_province": {
"terms": {
"field": "province"
},
"aggs": {
"latency_percentiles": {
"percentiles": {
"field": "latency",
"percents": [
50,
95,
99
]
}
},
"latency_avg": {
"avg": {
"field": "latency"
}
}
}
}
}
}
4、_percentiles rankおよびWebサイトアクセス遅延SLA統計
需要:200 ms以内のもの、1000ミリ秒以内のもの、percentile ranks metric
需要:ブランドによってグループ分けして、計算して、テレビ、価格は1000で比を占めて、2000は比を占めて、3000は比を占めます
GET /website/logs/_search
{
"size": 0,
"aggs": {
"group_by_province": {
"terms": {
"field": "province"
},
"aggs": {
"latency_percentile_ranks": {
"percentile_ranks": {
"field": "latency",
"values": [
200,
1000
]
}
}
}
}
}
}
percentileの最適化:percentileはTDigestアルゴリズムを使用し、多くのノードでパーセンテージの計算を実行し、近似推定、誤差があり、ノードが多ければ多いほど正確になる.
パラメータcompressionを使用して、ノードの数を制限することができます最大compression*20=2000個のnodeを計算して、デフォルトの100、数が大きいほど、メモリの使用量が多くなり、正確であればあるほど、性能が悪くなり、1つのノードは32バイトを使用して、100*20*32=64 KBを使用して、percentileアルゴリズムが正確であればあるほど、compressionは設定することができます.