小議ID生成演算法

2021-08-30 01:55:43 字數 725 閱讀 4836

id生成演算法,其中一種就是使用guid(又稱uuid),使用128位儲存。uuid的乙個問題是太長,可讀性太差,人腦無法記憶。

替代方案之一,就是使用關聯式資料庫的自增長字段,自增長欄位的乙個問題是,無法預先建立乙個id,只能夠在儲存的時候才能生成id,這對於批量關聯插入資料來說,不滿足需求。

替代方案之二,就是使用乙個記錄id的表,每次加一,在事務中使用select for update來讀取然後update set fvalue = fvalue + 1,或者使用我之前文章中所提到的cas演算法。 這樣做,會導致效能低下,每生成乙個id的成本都很高。

替代方案之三,就是把id分成兩部分,seed和incrementid。seed採用上面的方案二或者其他辦法生成,incrementid使用乙個atomicinteger來每次遞增生成。seed轉化為九進製數字,這樣seed就不會包含9,於是使用9作為分隔符,把seed和incrementid隔開。這樣做,就可以做高效能產生id,而且確保不重複。甚至可以更進一步,seed由乙個中心伺服器生成。使用9個分隔符號隔開seed和incrementid,好處是seed是變長,而不是使用固定位數來儲存seed,這樣產生的id會更短,可讀性更好。

舉例,34915,其中34時seed,15是incrementid,9是分隔符,seed部分採用九進製表示法,確保不出現9,第乙個9之後的內容屬於incrementid。

我已經做了乙個實現,用於實際開發中,思路採用方案三,有很多實作的細節,但是總體設計思路就是如此。

CART生成演算法

輸入 訓練資料集 d 停止計算的條件 輸出 cart 決策樹。根據訓練資料集,從根結點開始,遞迴地對每個結點進行以下操作,構造二叉決策樹 1 設結點的訓練資料集為 d 計算現有特徵對該資料集的基尼指數。此時,對每乙個特徵 a,對其可能取得每個值 a 根據樣本點對 a a的測試為 是 或 否 將 d ...

子集生成演算法

劉汝佳書上的內容 下文提到的集合 其元素預設為0 n 1 n 個 意思就是一次選乙個 放到 裡 include include include include include include include include include include include include includ...

子集生成演算法

子集生成演算法屬於暴力法中一類非常重要的演算法.給定乙個集合,請寫乙個演算法,得到其所有的子集.這裡假定該集合不存在重複的元素.舉個栗子,給定集合 1,2,3 你返回這樣一堆子集 1 2 3 1,2 1,3 2,3 1,2,3 根據離散數學的知識,我們可以知道,乙個長度為n的集合的子集有2n個,集合...