數據分片以及全局id的生成

一. 數據分片

在分佈式存儲系統中,數據需要分散存儲在多臺設備上,數據分片(Sharding)就是用來確定數據在多臺存儲設備上分佈的技術。數據分片要達到三個目的:

  1. 分佈均勻,即每臺設備上的數據量要儘可能相近;
  2. 負載均衡,即每臺設備上的請求量要儘可能相近;
  3. 擴縮容時產生的數據遷移儘可能少。

但是數據分片後,各個數據庫如何維護記錄的唯一性id呢?


二. 全局唯一性id的生成

1.mogodb的唯一性id生成算法

|0|1|2|3|4|5|6 |7|8|9|10|11|
|時間戳  |機器ID|PID|計數器   |
1. 時間戳:4個字節,標準紀元開始的以秒爲單位的時間戳;
2. 機器ID:3個字節,一般是主機名的散列值,保證機器的唯一性;
3. PID:2個字節,進程id,保證了同一臺機器上多個mongodb服務的唯一性;
4. 計數器:3個字節,一個自動增加的計數器,保證了同一秒內不會出現相同的id;

2.Mysql的UUID() 函數

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