數據庫水平拆分之ID生成策略

    衆所周知,數據分片包括水平和垂直,這裏只討論水平這種情況,並且,我們默認數據的切分規則是以ID。

    細化下來,其實主要是討論兩種情況:ID爲UUID或者說無序的字符串的情況,以及ID是數字形式的情況。前者無序,後者有序。

    當ID是無序字符串的時候,一般採用將ID哈希後再取模的形式,而數字則直接取模。從原理上說,前者無法保證數據徹底均勻的分佈在各個表中,而後者則沒有這種情況。

    但,空口無憑,一切還是要以事實爲依據,做到心中有數。所以,我創建了10張測試表,準備插入100萬條數據,用來探索UUID形式的ID加哈希這種算法的數據分佈情況。當然,其實有更簡單的方式,直接生成100萬個UUID然後哈希取模並計數就行了。不過,我正好測試Sharding JDBC,算是順勢而爲吧。

    數據如下:

表名 數據量
t0 100032
t1 100315
t2 99452
t3 99762
t4 100001
t5 99791
t6 100614
t7 100373
t8 99796
t9 99864

圖表來一個:

 

最大值 100614
最小值 99452
差值 1162

總結:如果是業務限制,UUID還能能用的,如果是新項目,能避免還是避免吧。 

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