1. 程式人生 > >elasticsearch系列(三)庫表理解

elasticsearch系列(三)庫表理解

目錄

 

正文

首先ES沒有庫和表的概念,只有index,type,document(詳細術語可以看ES的系列一 http://www.cnblogs.com/ulysses-you/p/6736926.html),如果要加快理解的話,可以和一般關係型資料庫做簡單對映

下面是對這些概念的理解

 

回到頂部

Index

1.ES的index中shards相當於lucene的indices,而lucene的indices會擁有固定的磁碟空間,內容和檔案描述,所以不能無腦新建ES的index,資料量大的1個index比多個小的index效率更高,所以ES的多個types代替多個indices可以減少ES對lucene的管理

2.儘量不要多個index一起查,ES在搜尋過程會集合要搜尋的每個index下的每個shards,所以會很吃資源

 

回到頂部

Type

1.1個index下搜尋1個type和多個type不需要消耗更多資源

2.fields必須保持一致,1個index中有兩個相同name的fields,但是type不同,則這兩個fields的propertis必須一樣

3.fields儘可能不要稀疏(hbase的表是稀疏型),已經存在的fileds會因為不存在的fields消耗資源,這也是lucene的一個問題

  ·由於fields稀疏會導致壓縮的效率降低。

  ·1個document會預留一個固定大小的磁碟空間來提高定址效率

4.由於index-wide統計,1個type下documents的scores會被其他type下documents影響

5.1個稀疏的index比把1個index分割成多個更加有害

 

回到頂部

總結

選擇儲存結構時的自問

  • Are you using parent/child? If yes this can only be done with two types in the same index.
  • Do your documents have similar mappings? If no, use different indices.
  • If you have many documents for each type, then the overhead of Lucene indices will be easily amortized so you can safely use indices, with fewer shards than the default of 5 if necessary.
  • Otherwise you can consider putting documents in different types of the same index. Or even in the same type.

 

常用套路

1個index包含5個type和5個index只有一個shard幾乎是等價的。

2.如果documents的mapping不同,就多開index

3.一般而言,多types的場景很少

4.追求高寫入,則增加shards,追求高讀取,則減少shards

 

回到頂部

參考資料

//官方index和type的比較

https://www.elastic.co/blog/index-vs-type

//外國友人寫的很詳細的ES部落格

https://blog.insightdatascience.com/anatomy-of-an-elasticsearch-cluster-part-i-7ac9a13b05db

 

是誰來自山川湖海 卻囿於晝夜廚房與愛