Elasticsearch 爲何要在 7.X版本中去除type 的概念

背景說明

Elasticsearch是一個基於Apache Lucene(TM)的開源搜索引擎。無論在開源還是專有領域,Lucene可以被認爲是迄今爲止最先進、性能最好的、功能最全的搜索引擎庫。

Elasticsearch 是一種NoSQL數據庫(非關係型數據庫),和常規的關係型數據庫(比如:MySQL,Oralce等)的基本概念,對應關係如下:

Elasticsearch:index   -->  type     -->   doc   -->  field

MySQL:           數據庫  -->   數據表 -->    行     -->  列

 

因爲關係型數據庫比非關係型數據庫的概念提出的早,而且很成熟,應用廣泛。

所以,後來很多NoSQL(包括:MongoDB,Elasticsearch等)都參考並延用了傳統關係型數據庫的基本概念。

 

一個客觀的現象和事實如下:

Elasticsearch 官網提出的近期版本對 type 概念的演變情況如下:

在 5.X 版本中,一個 index 下可以創建多個 type

在 6.X 版本中,一個 index 下只能存在一個 type

在 7.X 版本中,直接去除了 type 的概念,就是說 index 不再會有 type。 

 

爲何要去除 type 的概念?

爲何不是在 6.X 版本開始就直接去除 type,而是要逐步去除type?

Why?

 

原因分析

1、爲何要去除 type 的概念?

答: 因爲 Elasticsearch 設計初期,是直接查考了關係型數據庫的設計模式,存在了 type(數據表)的概念。

但是,其搜索引擎基於 Lucene 的,這種 “基因”決定了 type 是多餘的。 Lucene 的全文檢索功能之所以快,是因爲 倒序索引 的存在。

而這種 倒序索引 的生成是基於 index 的,而並非 type。多個type 反而會減慢搜索的速度。

爲了保持 Elasticsearch “一切爲了搜索” 的宗旨,適當的做些改變(去除 type)也是無可厚非的,也是值得的。

所以,Why not?

 

2、爲何不是在 6.X 版本開始就直接去除 type,而是要逐步去除type?

答:因爲歷史原因,前期 Elasticsearch 支持一個 index 下存在多個 type的,而且,有很多項目在使用 Elasticsearch 作爲數據庫。

如果直接去除 type 的概念,不僅是很多應用 Elasticsearch 的項目面臨 業務、功能和代碼的大改

而且對於 Elasticsearch 官方來說,也是一個巨大的挑戰(這個是傷筋動骨的大手術,很多涉及到 type 源碼是要修改的)。

所以,權衡利弊,採取逐步過渡的方式,最終,推遲到 7.X 版本才完成 “去除 type”  這個 革命性的變革

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章