1、路由演算法
shard=hash(routing)%number_of_primary_shards
例如 乙個index有3個primary shard p0,p1,p2每次增刪改修改乙個document的時候,都會帶過來乙個routing number,預設這個就是document 的_id。routing=_id,假設_id=1,會將這個routing值,傳入乙個函式中,產生乙個routing值的hash值,假如 hash(routing)=21.然後將hash函式產生的值和這個primary shard的數量求餘數,21%3=0。就決定了這個document放在p0上。
決定乙個document在哪個shard上,最重要的乙個值就是routing值,預設是_id,這個可以手工指定,也可以系統自動生成
2、路由的值
預設路由的值就是_id,也可以在傳送請求的時候,手動指定乙個routing value,比如說
put /index/type/id?routing=userid
3、為啥primary shard數量不可變
先我們說一點,乙個document只能在乙個primary shard中
還是剛才我們上面說到的3個primary shard ,_id=1。hash =21,這個document存放在p0這個shard裡面,如果說primary shard可以增加,假如我們增加乙個p3。當我們在get 這個_id=1的這個document的時候,會被請求到p1這個shard上面(21%4=1),這樣就會請求不到資料的。
4、es資料寫入和修改
1、當client傳送請求到任意乙個node的時候
2、所有的增刪改操作必須在primary shard上面執行,coordinator node將請求傳送對應的primary shard。
3、primary shard 會在自己本地建立document ,建立索引。
4、primary shard自己建立了document之後,就會將資料同步到自己的replica shard上去
5、coordinator node返回相應個client
php路由原理 PHP路由設定原理
0x00 路由實現原理 使用者通過指定的url正規化對後台進行訪問,url路由處理類進行處理後,到邏輯處理類,邏輯處理類將請求結果返回給使用者。約定url正規化和規則 約定一套自己喜歡的,對搜尋引擎友好,對使用者友好的url規則 url處理類 對使用者請求的url進行解析處理,獲取到使用者請求的類,...
ES 底層原理
es一般情況下分為 主節點,子節點,雲端節點 主節點 master 例如下面的boss 負責建立索引 刪除索引 分配分片 追蹤集群中的節點狀態等 子節點 負責儲存資料,修改索引,查詢資訊等 雲端節點 負責當資料丟失情況,進行恢復 每個索引預設有5個分片,1個副本數 number of shards ...
ES 004 ES工作原理
儲存資料shard hash routing number of primary shards routing是可變值,支援自定義,預設是文件 id hash函式生成資料,經過求餘演算法得到餘數,這個餘數就是分片的位置如何水平擴容put blogs settings elk 優勢 分布式實時檔案儲存...