ES - es爲何要移除type?

一、index、type的初衷html

以前es將index、type類比於關係型數據庫(例如mysql)中database、table,這麼考慮的目的是「方便管理數據之間的關係」。mysql

 

二、爲何如今要移除type?sql

2.1 在關係型數據庫中table是獨立的(獨立存儲),但es中同一個index中不一樣type是存儲在同一個索引中的(lucene的索引文件),所以不一樣type中相同名字的字段的定義(mapping)必須一致。數據庫

2.2 不一樣類型的「記錄」存儲在同一個index中,會影響lucene的壓縮性能。app

 

三、替換策略elasticsearch

3.1 一個index只存儲一種類型的「記錄」ide

這種方案的優勢:性能

a)lucene索引中數據比較整齊(相對於稀疏),利於lucene進行壓縮。ui

b)文本相關性打分更加精確(tf、idf,考慮idf中命中文檔總數)htm

3.2 用一個字段來存儲type

若是有不少規模比較小的數據表須要創建索引,能夠考慮放到同一個index中,每條記錄添加一個type字段進行區分。

這種方案的優勢:

a)es集羣對分片數量有限制,這種方案能夠減小index的數量。

 

四、遷移方案

以前一個index上有多個type,如何遷移到3.一、3.2方案?

4.1 先針對實際狀況建立新的index,[3.1方案]有多少個type就須要建立多少個新的index,[3.2方案]只須要建立一個新的index。

4.2 調用_reindex將以前index上的數據同步到新的索引上。

 

五、參考

a)Removal of mapping types 

相關文章
相關標籤/搜索