elasticsearch-[輸入輸出,併發處理,快速批量插入優化]

本章介紹:輸入,輸出,文檔元數據定義,以及 併發請求時elastic處理的方案,批量索引文檔時如何快速索引的原理

  • 輸入:增刪改
  • 輸出:查詢
  • 文檔的元數據:
_index

文檔在哪存放

_type

文檔表示的對象類別

_id

文檔唯一標識
  • 併發衝突:
   通常,我們的網站尤其在庫存方面,經常出現併發的請求導致 庫存出現負數:一個商品規格數量只有一件,這時候有兩個人同時下單,導致 1-2=-1, 儲存出現負數,那麼elasticsearch是怎麼處理呢?

一般數據庫的處理方式:悲觀併發控制,當讀取一行數據時候,給它鎖住,直到這行數據修改完畢才釋放鎖

elasticsearch的梳理方式:樂觀併發控制,利用版本號進行控制, 當我們調用接口 進行修改數據時候,這時候elasticsearch的_version屬性 會遞增,當出現兩個重複去修改數據的時候,指定的版本號 跟文檔的版本號不一致時候,就會返回錯誤信息.

 悲觀併發控制:假設肯定會出現併發狀態

樂觀併發控制:假設不會出現併發狀況
  • 批量索引文檔(插入數據):
看到一個有趣的大文件處理json的數據格式, good.json內容如下

{"index":{"_id":"1"}}
{"account_number":1,"balance":39225,"firstname":"Amber","lastname":"Duke","age":32,"gender":"M","address":"880 Holmes Lane","employer":"Pyrami","email":"[email protected]","city":"Brogan","state":"IL"}
 elasticsearch是這樣思考的,由於不同的文檔(數據)會根據一個hash(id)%主分片數量 來決定這個 文檔 (索引)存放到哪個主分片上。

因此 不同的文檔 可能存在不同的分片上。

假如:每次讀取一個json文件,需要讀取完整個文件的內容,並且解析json數據時候,如果這個文件太大,內存受不了,而且垃圾回收代價太大了,而且也不利於把這些數據索引到不同的主分片上。

elasticsearch解析原理:根據\n 換行符,當讀取每小段時候,就解析json數據,並且索引到不同分片上,並且釋放內存。這時候既能快速的插入數據,也能減少服務器的壓力,減少延時.

 

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