elasticsearch 與 傳統數據庫的區別與選用
1:ES
ElasticSearch是一款分布式全文檢索框架,底層基於基於Lucene實現。
ElasticSearch 使用 JSON 格式存儲數據,屬於文檔存儲
2:遍歷方式
ES有分片的概念,一個大的索引會被分成多個分片來進行存儲數據,使用分布式的架構對分片進行並行搜索(基於倒排)
傳統數據的遍歷,屬於正向全表掃描
3:ES采用倒排索引,傳統數據庫采用B+樹索引
倒排索引:
對文本進行分詞處理,記錄單詞,詞頻,文本id等信息,搜索時基於內容(根據單詞和詞頻詞向量等來計算評分)來找文本id
B+樹索:
一種樹的數據結構,存儲時會根據內容生成一個數節點,搜索時時跟據節點id來查找內容
4:es的注意點
ES沒有事務的概念,不支持回滾,無法恢復刪除數據
5 : 選用
在面對大數據量簡單計算的時候es的效率遠高於mysql等傳統數據庫,但是在定位某一個唯一值(如用會員id找會員)時並不需要es
在大數據的相似計算與查找或簡單計算時,es的分布式並行計算有絕對的優勢
ES(ElasticSearch)是一款分布式全文檢索框架,底層基於基於Lucene實現。ES與傳統數據的區別主要有:
1.結構名稱不同
一個ES集群可以包含多個索引(數據庫),每個索引又包含了很多類型(表),類型中包含了很多文檔(行),每個文檔使用 JSON 格式存儲數據,包含了很多字段(列)。
| 關系型數據庫 |
數據庫 |
表 |
行 |
列 |
| ElasticSearch |
索引 |
類型 |
文檔 |
字段 |
2.ES分布式搜索,傳統數據庫遍歷式搜索
ES支持分片和復制,從而方便水平分割和擴展,復制保證了es的高可用與高吞吐。
在ES中,當你創建一個索引(數據庫)的時候,你可以指定你想要的分片的數量。每個分片本身也是一個功能完善並且獨立的索引(數據庫),索引可以被放置到集群中的任何節點上。分片優點:
1.允許你水平分割/擴展你的內容容量
2.允許你在分片之上進行分布式的、並行的操作,進而提高性能/吞吐量
3.分片的分布,它的文檔怎樣聚合回搜索請求,完全由Elasticsearch管理
3.ES采用倒排索引,傳統數據庫采用B+樹索引
假設一個文檔(用id標識)是有許多的單詞(用value標識)組成的,每個單詞可能同一個文檔中重復出現很多次,也可能出現在不同的文檔中。
正排索引:從文檔角度看其中的單詞,表示每個文檔都含有哪些單詞,以及每個單詞出現了多少次(詞頻)及其出現位置(相對於文檔首部的偏移量)。
倒排索引:從單詞角度看文檔,標識每個單詞分別在那些文檔中出現(文檔ID),以及在各自的文檔中每個單詞分別出現了多少次(詞頻)及其出現位置(相對於該文檔首部的偏移量)。
簡單理解,
正排索引:id ---> value
倒排索引:value ---> id
ES中為所有字段默認都建了倒排索引。
4.ES沒有用戶驗證和權限控制
5.ES沒有事務的概念,不支持回滾,誤刪不能恢復
6.ES免費,完全開源;傳統數據庫部分免費
7.結合工作舉例
例如,要計算出2.38億會員中有多少80后的已婚的上海男士。
傳統數據庫執行時間: 5個小時左右
ES執行時間:1分鍾
