業務ID 生成規則

在實際業務中,是否碰到過這種場景:數據庫

咱們須要一個單號,要在業務系統裏面保證惟一,保證增加?併發

在運營過程,須要知道業務單發生的時間,最好不用通過系統查找就知道發生的時間?設計

在排障過程當中,不用再次查找就知道,訂單的一些信息?接口

 

業務ID 常常須要生成以方便後續跟蹤使用。通常須要知足如下特性:string

1. 惟一性it

2. 可閱讀序列化

3. 增加技術

4. 數字類型?數據

5. 其餘信息(payload)協議

 

因此,業務ID的生成,這裏涉及兩個問題:

1. ID 的規則,也就是ID 最終長什麼樣,知足什麼約束

2. ID 生成策略

 

好比,一個常見的訂單號生成規則可能以下:{yyyyMMddHHmm}[0-9][0-9]{4}

這個規則知足瞭如下約束:

1. 17位數字, 數據庫存儲能夠用BIGINT 存儲, 各系統接口可使用Long 類型交互

2. 能夠閱讀, 經過{yyyyMMddHHmm} 快速的知道訂單的建立時間

3. 能夠猜想類型, 如中間的[0-9],支持10種類型, 這個數據豐富信息,可不存。

4. 支持的最大併發在每分鐘10000,在系統確實有每分鐘10000個訂單,這個單號生成策略就夠了

 

固然,上述訂單號規則,只是一種實例,不過對大多數小系統足夠了。即使是這樣,上述規則,也有一些缺陷。

好比Long 範圍的限定狀況下, 使用了相似string 的 拼接技術,未能充分使用Long的範圍。

 

若是ID 規則,不用太多考慮可讀性的話, 能夠像設計序列化協議同樣,設計的更爲緊湊,以容納更多信息, 好比Long 有64bit,能夠按照bit 長度劃分紅若干段。

 

 

現實中,有不少系統爲了單號的可讀性,常常會超出Long的最大值,因此設計爲 NChar(128) 也比較常見。

相關文章
相關標籤/搜索