寫入過程:寫入index buffer->每1秒鐘refresh到os cache->每30分鐘flush os cache中的數據到segment文件
每次寫入操作:都會寫入translog
每1秒鐘將index buffer寫入一個新的os cache中的segment一次,清空buffer這個操作叫refresh
可以手動refresh將內存中的數據刷到os cache
而flush是將os cache中的數據寫入文件。
每次寫操作都會記入translog文件,而translog文件是不斷變大的,當大到一定閾值時或每30分鐘,會commit一次,寫一次commit point文件,並將os cache中緩存中的數據衝到磁盤文件中,並清空translog文件。
每次flush:
1、寫commit point
2、將os cache數據強衝到磁盤
3、清空translog日誌文件
Es重啓會自動讀取translog日誌文件自動恢復到內存中
當segment file多到一定程度後
Es會觸發merge操作,將多個segment file合併到一個文件中
刪除:將某條數據的標示寫入到.del文件中,標示已被刪除
ES搜索過程
1、協調節點發送搜索指令給每個有shard的節點
2、每個節點返回查到的doc id和排序字段
3、協調節點再排序,再拿doc ids到各個shard中讀取數據
一般用ES+Hbase方案或ES+MySQL方案
Es中寫入需要用來查詢的字段,Hbase中存入所有字段
es中的數據量建議小於等於filesystem cache的容量
filesystem cache調整爲32G,則建議es中的數據只保存32g
方案:
1、減少數據量,只寫入需要用來檢索的字段
2、es中的數據量小於等於filesystem cache的容量
做好數據預熱過程