1. 程式人生 > >數據庫主鍵到底是用自增長(INT)好還是UUID好

數據庫主鍵到底是用自增長(INT)好還是UUID好

p s 生成 size byte margin 滿足 工具 資源 服務器

其實針對使用自增長還是UUID,大家討論最多的就是速度和存儲空間,這裏我加入了安全性和分布式,具體對比如下:

使用自增長做主鍵的優點:
1、很小的數據存儲空間
2、性能最好
3、容易記憶
使用自增長做主鍵的缺點:
1、如果存在大量的數據,可能會超出自增長的取值範圍
2、很難(並不是不能)處理分布式存儲的數據表,尤其是需要合並表的情況下
3、安全性低,因為是有規律的,容易被非法獲取數據
使用GUID做主鍵的優點:
1、它是獨一無二的,出現重復的機會少
2、適合大量數據中的插入和更新操作,尤其是在高並發和分布式環境下
3、跨服務器數據合並非常方便
4、安全性較高
使用GUID做主鍵的缺點:
1、存儲空間大(16 byte),因此它將會占用更多的磁盤空間


2、會降低性能
3、很難記憶

結合每個項目的實際應用,我們應該怎麽選擇呢?如下:

1、項目是單機版的,並且數據量比較大(百萬級)時,用自增長的,此時最好能考慮下安全性,做些安全措施。
2、項目是單機版的,並且數據量沒那麽大,對速度和存儲要求不高時,用UUID。
3、項目是分布式的,那麽首選UUID,分布式一般對速度和存儲要求不高。
4、項目是分布式的,並且數據量達到千萬級別可更高時,對速度和存儲有要求時,可以用自增長。

現在有人就會問了,為什麽不直接用第4種方案,它滿足前面三種方案的所有要求?就是因為在用自增長時分布式處理會很復雜(具體方案可以百度),在資源有限的情況可以采用前面三種簡單的實現方案。

那麽,為什麽一定要使用自增長或UUID作為數據庫主鍵呢?有沒有更好的解決方案呢?肯定有:snowflake

其實大部分項目可以使用twitter的snowflake來生成主鍵,snowflake生成的主鍵就是介於自增長和UUID之間的一種主鍵(存儲空間小、速度快、分布式、時間序列)。據說snowflake每秒能夠產生26萬個ID,最多可以部署在1024個節點上,研發團隊可以將snowflake作為底層的數據庫主鍵工具類供團隊成員使用。

我自己的觀點是:對於項目中涉及到的業務名稱表的主鍵用UUID,而業務與業務之間的關系表的主鍵用自增;


轉載至: http://www.yyjjssnn.cn/articles/754.html

數據庫主鍵到底是用自增長(INT)好還是UUID好