一. 數據分片
在分佈式存儲系統中,數據需要分散存儲在多臺設備上,數據分片(Sharding)就是用來確定數據在多臺存儲設備上分佈的技術。數據分片要達到三個目的:
- 分佈均勻,即每臺設備上的數據量要儘可能相近;
- 負載均衡,即每臺設備上的請求量要儘可能相近;
- 擴縮容時產生的數據遷移儘可能少。
但是數據分片後,各個數據庫如何維護記錄的唯一性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() 函數