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分鐘