1. 程式人生 > >分庫分表(sharding)後主鍵全域性唯一性的解決方案

分庫分表(sharding)後主鍵全域性唯一性的解決方案

隨著資料量的增大,在資料庫的擴充套件上通常遇到切分時保證鍵值的唯一性問題,遇到這種情況,通常有如下幾種相對簡單的解決方案:

1  UUID 這種方案的優點是實現和管理簡單,缺點是佔用空間大,查詢效率低下。

2  Sequence Number 優點是實現和管理簡單,確定是有效能瓶頸和單點問題。

3  不同的叢集採用的起始點或者增長間隔不同 這種方案實現簡單,但是後期管理麻煩。

除了上述解決方案之外其實還有很多簡單可行的辦法,但是通用性不太好,在各種解決方案的接觸上,本人總結出一個實現和效能上都很好的解決方案,那就是採用時間戳加毫秒數再加隨機數來解決,儲存欄位採用bigint。 下面給出php程式碼實現: function
ivan_fetch_unique_bigint_id()
{
    $start_timestamp = 1238119411;
    $ivan_len = 3;
    $time = explode( ‘ ‘, microtime());
    $id = ($time[1] - $start_timestamp) . sprintf(‘%06u’, substr($time[0], 2, 6));
    if ($ivan_len > 0) {
        $id .= substr(sprintf(‘%010u’, mt_rand()), 0, $ivan_len);
    }
    return
$id;
} 取模測試均分性很好。 – 轉載請註明出處,謝謝。