雪花演算法
mp 支援多種主鍵策略 預設是推特的「」 雪花演算法「」 ,也可以設定其他策略下面我演示主鍵策略使用
public
enum idtype
public
intgetkey()
}
mybatis-plus:
global-config:
db-config:
id-type: uuid/none/input/id_worker/id_worker_str/auto 表示全域性主鍵都採用該策
auto(0),
none(1),
input(2),
assign_id(3),
assign_uuid(4),
/** @deprecated */
@deprecated
id_worker(3),
/** @deprecated */
@deprecated
id_worker_str(3),
/** @deprecated */
@deprecated
uuid(4);
值
描述auto
資料庫id自增
none
無狀態,該型別為未設定主鍵型別(註解裡等於跟隨全域性,全域性裡約等於 input)
input
insert前自行set主鍵值
assign_id
分配id(主鍵型別為number(long和integer)或string)(since 3.3.0),使用介面identifiergenerator的方法nextid(預設實現類為defaultidentifiergenerator雪花演算法)
assign_uuid
分配uuid,主鍵型別為string(since 3.3.0),使用介面identifiergenerator的方法nextuuid(預設default方法)
id_worker
分布式全域性唯一id 長整型型別(please use assign_id)
uuid
32位uuid字串(please use assign_uuid)
id_worker_str
分布式全域性唯一id 字串型別(please use assign_id)
@tableid
(type = idtype.auto)
//主鍵自增 資料庫中需要設定主鍵自增
private long id;
@tableid
(type = idtype.none)
//預設 跟隨全域性策略走
private long id;
@tableid
(type = idtype.uuid)
//uuid型別主鍵
private long id;
@tableid
(type = idtype.id_worker)
//數值型別 資料庫中也必須是數值型別 否則會報錯
private long id;
@tableid
(type = idtype.id_worker_str)
//字串型別 資料庫也要保證一樣字元型別
private long id;
@tableid
(type = idtype.input)
//使用者自定義了 資料型別和資料庫保持一致就行
private long id;
snowflake 演算法,是 twitter 開源的分布式 id 生成演算法。其核心思想就是:使用乙個 64 bit 的 long 型的數字作為全域性唯一 id。在分布式系統中的應用十分廣泛,且id 引入了時間戳,基本上保持自增的
這 64 個 bit 中,其中 1 個 bit 是不用的,然後用其中的 41 bit 作為毫秒數,用 10 bit 作為工作機器 id,12 bit 作為序列號
比如下面那個 64 bit 的 long 型數字:
0 | 0001100 10100010 10111110 10001001 01011100 00 | 10001 |1 1001| 0000 00000000
第乙個部分,是 1 個 bit:0,這個是無意義的。
第二個部分是 41 個 bit:表示的是時間戳。
第三個部分是 5 個 bit:表示的是機房 id,10001。
第四個部分是 5 個 bit:表示的是機器 id,1 1001。
第五個部分是 12 個 bit:表示的序號,就是某個機房某台機器上這一毫秒內同時生成的 id 的序號,0000 00000000。
主鍵生成策略
一共是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...