亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么設計優雅的數據庫ID

發布時間:2021-11-04 15:24:26 來源:億速云 閱讀:244 作者:iii 欄目:web開發

這篇文章主要講解了“怎么設計優雅的數據庫ID”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么設計優雅的數據庫ID”吧!

自增ID

這種方式用起來最簡單,也是很多程序員喜歡用的方式。使用方法:mysql有auto_increment;oracle里有sequence

這種方式的缺點很明顯,容易被探測,假設我是一個博客系統,某一遍文章的id=10,那么顯示在瀏覽器上的地址大概是這樣子:www.xxxx.com/article?id=10,對于有點程序經驗的人來說,他就會直接在瀏覽器上打www.xxxx.com/article?id=11,id=12等,更甚的可以用postman,jmeter等http測試工具,這樣就可以探測出所有的文章。博客文章系統可能還不要緊,但如果是一些商城系統,就容易泄露重要信息,比如系統有多少筆訂單,每筆訂單的金額、狀態都可以被試探出來。

還有一個缺點,當我們在做一個新增操作時,這個ID是數據庫自增的,但是代碼業務層并不知道,如果我們要拿這個ID做其他操作,這時就只能重新查一遍數據庫了。

數據庫UUID

這種方式解決了自增ID容易被探測的問題,使用方法:mysql的uuid()函數,生成出來是32位的16進制數,在有生之年不會有重復,如下圖:

怎么設計優雅的數據庫ID

但是它依然有一個缺點,就是新增操作時,業務層不知道ID,非要重新查一遍數據庫才知道。

JAVA生成UUID

這種方式解決了數據庫UUID的一個問題,ID是JAVA代碼生成的,減少了一次數據庫查詢。這種方式是大多數項目在使用的方式,具體代碼如下

public class UuidUtil {
   /**
    * 獲得一個UUID
    */
   public static String getUUID(){
       String uuid = UUID.randomUUID().toString();
       //去掉“-”符號
       return uuid.replaceAll("-", "");
   }
}

優雅的短UUID

JAVA生成UUID的方式雖然已經很通用了,但是依然有一個小缺點,占用的空間太大,所有表的ID都要占用32位的字符。所以我自己設計了一個短UUID,原理就是生成一個8位的62進制數,將所有的數字、大小寫字母全部用上(數據庫UUID是16進制,只用了數字和6個字母)。代碼如下

public class UuidUtil {

   public static String[] chars = new String[] { "a", "b", "c", "d", "e", "f",
           "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s",
           "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5",
           "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I",
           "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V",
           "W", "X", "Y", "Z" };    public static String getShortUuid() {
       StringBuffer shortBuffer = new StringBuffer();
       String uuid = UUID.randomUUID().toString().replace("-", "");
       for (int i = 0; i < 8; i++) {
           String str = uuid.substring(i * 4, i * 4 + 4);
           int x = Integer.parseInt(str, 16);
           shortBuffer.append(chars[x % 0x3E]);
       }
       return shortBuffer.toString();

   }
}

生成的ID如下:

怎么設計優雅的數據庫ID

感謝各位的閱讀,以上就是“怎么設計優雅的數據庫ID”的內容了,經過本文的學習后,相信大家對怎么設計優雅的數據庫ID這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

诏安县| 新余市| 德钦县| 广元市| 句容市| 海盐县| 九台市| 额尔古纳市| 淮南市| 苏州市| 高平市| 基隆市| 四川省| 监利县| 嫩江县| 福清市| 沧源| 增城市| 丹阳市| 乌鲁木齐县| 灌阳县| 台东市| 苏尼特右旗| 汤原县| 柳林县| 衢州市| 玉龙| 温泉县| 宜州市| 西和县| 来凤县| 英吉沙县| 南宫市| 临泉县| 衡南县| 黑河市| 岳池县| 慈溪市| 长宁县| 阜平县| 德化县|