ElasticSearch 學習記錄之如任何設計可擴容的索引結構

ElasticSearch 系列文章

1 ES 入門之一 安裝ElasticSearcha

2 ES 記錄之如何建立一個索引映射

3 ElasticSearch 學習記錄之Text keyword 兩種基本類型區別

4 ES 入門記錄之 match和term查詢的區別

5 ElasticSearch 學習記錄之ES幾種常見的聚合操做

6 ElasticSearch 學習記錄之父子結構的查詢

7 ElasticSearch 學習記錄之ES查詢添加排序字段和使用missing或existing字段查詢

8 ElasticSearch 學習記錄之ES高亮搜索

9 ElasticSearch 學習記錄之ES短語匹配基本用法

10 ElasticSearch 學習記錄之 分佈式文檔存儲往ES中存數據和取數據的原理

11 ElasticSearch 學習記錄之集羣分片內部原理

12 ElasticSearch 學習記錄之ES如何操做Lucene段

13 ElasticSearch 學習記錄之如任何設計可擴容的索引結構

14 ElasticSearch之 控制相關度原理講解







擴容設計

擴容的單元

  • 一個分片即一個 Lucene 索引 ,一個 Elasticsearch 索引即一系列分片的集合
  • 一個分片即爲 擴容的單元 。 一個最小的索引擁有一個分片。
  • 一個只有一個分片的索引無擴容因子
    -html

  • 如何判斷一個請求過來,個人信息在哪一個分片上面
    • shard = hash(routing) % number_of_primary_shards
    • routing 大體是指文檔的idapp

      分片預分配

  • 一個分片存在於單個節點, 但一個節點能夠持有多個分片
  • 一個擁有兩個分片的索引能夠利用第二個節點來存儲數據
    -elasticsearch

  • Elasticsearch 中新添加的索引默認被指定了五個主分片
  • 爲什麼不使用分片的分裂而是分片複製轉移
    • 分裂分片是從新索引數據,比複製更重
    • 分裂是指數級的
    • 分裂須要足夠大的空間分佈式

      海量分片

  • 如何控制分片的數量
  • 分片的數據模型是什麼
    • 一個分片的底層是Lucene索引,會消耗文件的句柄 內存 CPU 等
    • 每一個搜索請求都會命中索引的每一個分片,多個分片咋同一個節點上會競爭資源
    • 基於相關度的詞頻信息計算是基於分片的
    • 容量規劃

  • 如何根據本身的自身狀況,來判斷分片的多少
  • 能夠根據下面的步驟,在特定環境中測定分片的多少
    • 基於生產的單個節點集羣
    • 和生產相同的索引,知識他只有一個主分片無副本分片
    • 索引實際文檔
    • 查詢或聚合實際文檔
    • 在真實的環境上運行,直到它掛掉。
    • 而後根據上面的信息,來進行分片的數量的計算性能

      副本分片

  • 副本分片的主要目的就是爲了故障轉移
  • 若是持有主分片的節點掛掉了,一個副本分片就會晉升爲主分片
  • 新文檔首先被索引進主分片而後再同步到其它全部的副本分片
  • 副本分片能夠服務於讀請求
  • 能夠經過增長副本的數目來提高查詢性能
  • 一個擁有兩個主分片一份副本的索引能夠在四個節點中橫向擴展
  • 過調整副本數來均衡節點負載
    • 原則上一個主分片不會它索引的副本分片在一塊兒

多索引

  • 如何不停服務來增長容量
    • 建立一個新的索引存儲數據
    • 同時搜索兩個索引來獲取新數據和舊數據
    • 使用索引別名來同時查詢兩個索引的數據

索引模板‘

  • 使用模板能夠建立有用的索引
    建立索引模板學習

    PUT /_template/my_logs 建立一個名爲 my_logs 的模板
    {
    "template": "logstash-*",
    將這個模板應用於全部以 logstash- 爲起始的索引
    "order": 1, 這個模板將會覆蓋默認的 logstash 模板,由於默認模板的 order 更低。
    "settings": {
    "number_of_shards": 1 限制主分片數量爲 1
    },
    "mappings": {
    "default": { 爲全部類型禁用 _all 域
    "_all": {
    "enabled": false
    }
    }
    },
    "aliases": {
    "last_3_months": {}
    添加這個索引至 last_3_months 別名中。
    }
    }設計

數據過時

  • 一次刪除多個索引
    • DELETE /logs_2013* //使用通配符
      關閉舊的索引
    POST /logs_2014-01-*/_flush 刷寫(Flush)全部一月的索引來清空事務日誌
    POST /logs_2014-01-*/_close
    關閉全部一月的索引.
    POST /logs_2014-01-*/_open當你須要再次訪問它們時,使用 open API 來從新打開它們。

歸檔舊索引數據
很是舊的索引 能夠經過snapshot-restore API歸檔至長期存儲rest

基於用戶的數據

Elasticsearch 支持多租戶因此每一個用戶能夠在相同的集羣中擁有本身的索引
一個用戶一個索引」對大多數場景均可以知足日誌

共享索引

利用別名實現一個用戶一個索引

對子文檔進行聚合操做code

POST product/_search
{
 "size": 0,
 "aggs": {
   "productSource": {
     "terms": {
       "field": "productSource"
     },
     "aggs": {
       "prices": {
         "children": {
           "type": "price"
         },
         "aggs": {
           "minPrice": {
             "terms": {
               "field": "minPrice"
             }
           }
         }
       }
     }
   }
 }
}
相關文章
相關標籤/搜索