業務unique ID的生成策略分析

2021-08-28 01:54:05 字數 721 閱讀 9714

業務unique id的生產策略分析

需求上下文:

業務是和單個user相關的(userid),業務表分到10個db host中

需求:高併發下生產唯一的業務id

每個db host上有乙個業務seq,  這個seq自增步長是10,然後每個host起點不一樣, 0 是0, 1是1,這樣每個 db host生成的seq資料就不會衝突(host1上只會生產尾數為1的seq,host2上只會生產尾數為2的seq,類推)

具體生產seq的oracle sql為:

select  business_id_seq_0.nextval from dual   //生成乙個

select  business_id_seq_0.nextval from dual connect by level <= 100  //生成100個

查詢的時候每次seq生成100個,快取到本地記憶體中的佇列(concurrentlinkedqueue), 下次就從記憶體中取了

但這個code中的synchronized鎖加的很奇怪, concurrentlinkedqueue是在鎖的**塊內部使用的, 但如果上下文環境是安全的,concurrentlinkedqueue這個高併發佇列不就沒意義了嗎,

個人覺得加鎖應該只加在從資料庫拿100個seq的時候加,防止多個執行緒同時去資料庫建立100個seq,導致重複建立。在那之外的獲取seq其實不用加鎖的,因為concurrentlinkedqueue已經是執行緒安全。

主鍵生成策略

一共是13種,其中包括native native 對於 oracle 採用 sequence 方式,對於mysql 和 sql server 採用identity 自增主鍵生成機制 native就是將主鍵的生成工作交由資料庫完成,hibernate不管 很常用 uuid 採用128位的uuid演算法...

主鍵生成策略

原文 generatedvalue,jpa通用策略生成器 jpa提供的四種標準用法為table,sequence,identity,auto.table 使用乙個特定的資料庫 來儲存主鍵。sequence 根據底層資料庫的序列來生成主鍵,條件是資料庫支援序列。id generatedvalue st...

主鍵生成策略

1 自動增長identity 適用於mysql db2 ms sql server,採用資料庫生成的主鍵,用於為long short int型別生成唯一標識 使用sql server 和 mysql 的自增欄位,這個方法不能放到 oracle 中,oracle 不支援自增字段,要設定sequence...