1、Elasticsearch 索引的設計
1.1 單一索引還是基于時間的索引?

單一索引的問題:
1)不能更新Mapping。
比如:主分片數不可以修改(除非reindex)。
2)無法靈活、快速地擴充。
3)更适合固定、小型資料集。
基于時間的索引面臨的問題:
1)如何确定間隔?
資料量
變更頻率
預設嘗試每周為機關分割——建議
2)如何實施?
索引模闆
1.2 定義索引注意事項
舉例:
{
"facet_internet_access_minute":{
"template":"ce-index-access-v1-*",
"order":0,
"settings":{
"number_of_shards":5
},
"aliases":{
"{index}-query":{
}
},
"mappings":{
"es_doc":{
"dynamic":"strict",
"_all":{
"enabled":false
},
"_source":{
"enabled":false
},
"properties":{
"CLF_Timestamp":{
"type":"long"
},
"CLF_CustomerID":{
"type":"keyword"
},
"CLF_ClientIP":{
"type":"ip",
"ignore_malformed":true
}
}
}
}
}
}
注意1:不要在一個索引中定義多個type。
6.X版本已經不支援,7.X版本徹底不支援。
擴充問題:5.X版本的父子文檔實際實作中是一個索引中定義了多個type,到了6.X中實作方式改變為:join方式。
注意2:将Set _source設定為false。
假設你隻關心度量結果,不是原始檔案内容。
将節省磁盤空間并減少IO。
這個點,需要結合實際的業務場景具體問題具體分析。
“_source”:{
“enabled”:false
},
注意3:将_all設定為false。
假設你确切地知道你對哪個field做查詢操作?
能實作性能提升,縮減存儲。
“_all”:{
“enabled”:false },
注意4:設定dynamic = strict。
假設你的資料是結構化資料。
字段設定嚴格,避免髒資料注入。
“dynamic”:”strict”,
注意5:使用keyword類型
假設你隻關心完全比對
提高性能和縮小磁盤存儲空間
“CLF_CustomerID”:{
“type”:”keyword”
},
注意6:使用别名
如何在不停機的前提從一個索引切換到另一個索引?
“aliases”:{
“{index}-query”:{
}
或者你通過head插件建立。
2、Elasticsearch分片配置設定原則
社群和QQ群中經常被問到的問題:
1)應該分幾個索引、幾個分片?
2)每個分片大小如何設定?
3)副本多少如何設定?
這裡,明确給出實操可行的6個步驟。
步驟1:定義索引。
思考索引中要大緻有哪些字段?
最好能列一個Excel表統計一下,包含但不限于:
序号、名稱、類型、作用、備注。
以上對計算單條資料大小也有用。
步驟2:評估資料量。
評估方法舉例:
1分鐘有100條資料,1天=1006024=144000條。
1月=144000條*30天=432W條資料。
1年=432W*12=5184W條資料。
假設要儲存2年,共=10368W條資料。
假設每條資料20KB,共需要存儲:10368W*20/1024/1024/1024=1.977TB。
步驟3:評估索引大小和磁盤空間。
步驟4:計算分片數。
細節考慮點:
1、每個分片大小應小于30GB。
2、分片數量= k *資料節點數目(k = 一個足夠小的整數,舉例:1,2,3)
3、假設你有一個小的索引,并且你有叢集中有足夠的節點,請嘗試使用預設值分片數5。
步驟5:評估索引數和類型。
(此處可能會有多次回報疊代)
3、資料去重的思考?
方法1:指定唯一id
缺點:
1、唯一值無法壓縮,不利于存儲。
2、存在高基數問題。
方法2:用聚合方法實作
步驟1:所有文檔加一個Hash值;
步驟2:檢查重複;
GET *_index/_search {
“size”:0,
“aggs”:{
“duplicate”:{
“terms”:{
“field”:”hash”,
“min_doc_count”:2,
“size”:5000
},
“aggs”:{
“documents”:{
“top_hits”:{
“size”:2
}
}
}
}
} }
步驟3:批量删除步驟2中的重複id。
以上步驟,不影響寫入,可以實作異步。
1、存儲量大(尤其超過3億條+);
2、随着資料量增加,聚合受影響,越來越慢。
3、存在高基數問題。
方法3:用distinct query實作
深入方法待進一步探讨。
4、小結
以上内容是Elasticsearch南京分享會20180630上的分享核心筆記。
具體PPT位址:
https://elasticsearch.cn/slides/115很受用的分析步驟和實戰經驗,實戰中都可以用得上。
作者:銘毅天下
轉載請标明出處,原文位址:
https://blog.csdn.net/laoyang360/article/details/80892392