1.大綱
Es是什么?處理哪種業務邏輯用的多?
Es類比數據庫是什么?
對於數據庫的字段、表等,在es中叫什么?
Es的refresh把數據寫到哪里?
Es的數據如何變成檢索和聚合索引的?
Es的flush操作是干什么的?
2.Es是什么?處理哪種業務邏輯用的多?
elasticsearch簡寫es,es是一個高擴展、開源的全文檢索和分析引擎,它可以准實時地快速存儲、搜索、分析海量的數據。
什么是全文檢索
全文檢索是指計算機索引程序通過掃描文章中的每一個詞,對每一個詞建立一個索引,指明該詞在文章中出現的次數和位置,當用戶查詢時,檢索程序就根據事先建立的索引進行查找,並將查找的結果反饋給用戶的檢索方式。這個過程類似於通過字典中的檢索字表查字的過程。全文搜索搜索引擎數據庫中的數據。
es的應用場景
- 一個線上商城系統,用戶需要搜索商城上的商品。
在這里你可以用es存儲所有的商品信息和庫存信息,用戶只需要輸入”空調”就可以搜索到他需要搜索到的商品。 - 一個運行的系統需要收集日志,用這些日志來分析、挖掘從而獲取系統業務未來的趨勢。
你可以用logstash(elk中的一個產品,elasticsearch/logstash/kibana)收集、轉換你的日志,並將他們存儲到es中。一旦數據到達es中,就你可以在里面搜索、運行聚合函數等操作來挖掘任何你感興趣的信息。 - 如果你有想基於大量數據(數百萬甚至數十億的數據)快速調查、分析並且要將分析結果可視化的需求。
你可以用es來存儲你的數據,用kibana構建自定義的可視化圖形、報表,為業務決策提供科學的數據依據。
直白點講,es是一個企業級海量數據的搜索引擎,可以理解為是一個企業級的百度搜索,除了搜索之外,es還可以快速的實現聚合運算。
3.Es類比數據庫是什么?
4.Es的refresh把數據寫到哪里?
refresh實現的是文檔從內存移到文件系統緩存的過程。
5.Es的數據如何變成檢索和聚合索引的?
6.Es的flush操作是干什么的?
刷到磁盤
7.整體流程
- 數據寫入buffer緩沖和translog日志文件中。
當你寫一條數據document的時候,一方面寫入到mem buffer緩沖中,一方面同時寫入到translog日志文件中。 - buffer滿了或者每隔1秒(可配),refresh將mem buffer中的數據生成index segment文件並寫入os cache,此時index segment可被打開以供search查詢讀取,這樣文檔就可以被搜索到了(注意,此時文檔還沒有寫到磁盤上);然后清空mem buffer供后續使用。可見,refresh實現的是文檔從內存移到文件系統緩存的過程。
- 重復上兩個步驟,新的segment不斷添加到os cache,mem buffer不斷被清空,而translog的數據不斷增加,隨着時間的推移,translog文件會越來越大。
- 當translog長度達到一定程度的時候,會觸發flush操作,否則默認每隔30分鍾也會定時flush,其主要過程:
4.1. 執行refresh操作將mem buffer中的數據寫入到新的segment並寫入os cache,然后打開本segment以供search使用,最后再次清空mem buffer。
4.2. 一個commit point被寫入磁盤,這個commit point中標明所有的index segment。
4.3. filesystem cache(os cache)中緩存的所有的index segment文件被fsync強制刷到磁盤os disk,當index segment被fsync強制刷到磁盤上以后,就會被打開,供查詢使用。
4.4. translog被清空和刪除,創建一個新的translog。
8.知識點
ES沒有用戶驗證和權限控制
ES沒有事務的概念,不支持回滾,誤刪不能恢復
ES免費,完全開源;傳統數據庫部分免費
ES采用倒排索引,傳統數據庫采用B+樹索引
ES分布式搜索,傳統數據庫遍歷式搜索
ES支持分片和復制,從而方便水平分割和擴展,復制保證了es的高可用與高吞吐。