首页 > 数据库 >在数据库中使用UUID+自增长ID混合方式,同时满足系统安全性和查询效率

在数据库中使用UUID+自增长ID混合方式,同时满足系统安全性和查询效率

时间:2024-03-11 18:34:48浏览次数:25  
标签:uuid -- 数据库 查询 ID UUID

在数据库中使用UUID+自增长ID混合方式,可以达到较好的安全性和查询效率。具体的实现方式如下:

在数据库表中创建两个字段,一个是 UUID 字段作为全局唯一主键,另一个是自增长的整型字段作为局部有序键。
例如:

sql:

CREATE TABLE `table_name` (
`uuid` CHAR(36) NOT NULL, -- UUID 全局唯一键
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT, -- 自增长局部有序键
... -- 其他字段
PRIMARY KEY (`uuid`),
UNIQUE KEY `idx_id` (`id`)
)


在应用程序端生成 UUID 作为新记录的全局主键。有多种算法可以生成 UUID,比如基于时间戳、随机数、哈希等。
将生成的 UUID 和自增长 ID 一起插入数据库。自增长 ID 可以由数据库自动维护。

uuid = generate_uuid()
insert_record(uuid, null, other_values)
对于需要全局唯一性和数据分片的查询,使用 UUID 作为条件查询。对于需要有序性和分页的查询,使用自增长 ID 作为条件。

sql:

-- 根据 UUID 进行全局唯一查询
SELECT * FROM table_name WHERE uuid = '550e8400-e29b-41d4-a716-446655440000';

-- 根据自增长 ID 进行有序、分页查询
SELECT * FROM table_name ORDER BY id LIMIT 100, 20;


这种混合方式的优点是:

  • 利用 UUID 保证了全局唯一性和数据分布,适合分布式场景
  • 使用自增长 ID 来提高查询效率,符合有序分页的需求
  • 主键设计合理,同时考虑了安全性和查询性能

需要注意的是:

  • 生成 UUID 会有一定的性能开销,但相对数据库的读写开销来说可以接受
  • 自增长 ID 只保证单个节点内的有序性,多节点部署时需要分库分表
  • 主键总长度会比单一使用 UUID 或自增长 ID 更长,会稍微增加索引存储


通过这种方式,可以根据不同的业务场景来使用合适的键,较好地平衡了安全性、唯一性、有序性和查询效率。

标签:uuid,--,数据库,查询,ID,UUID
From: https://www.cnblogs.com/mili0601/p/18066750

相关文章

  • BOSHIDA DC电源模块的质量控制与品牌评估
    BOSHIDADC电源模块的质量控制与品牌评估质量控制是确保DC电源模块符合一定标准的过程。品牌评估是对品牌形象、市场认可度和用户满意度的评估。下面是关于DC电源模块质量控制和品牌评估的一些建议: 质量控制:1.选择合适的供应商:与有良好声誉和专业知识的供应商合作,确保供应商......
  • Android 《Notification》
    代码packagecom.xian.app.broadcast;importandroidx.appcompat.app.AppCompatActivity;importandroidx.core.app.NotificationCompat;importandroid.app.Notification;importandroid.app.NotificationChannel;importandroid.app.NotificationManager;publiccla......
  • 找不到包 Microsoft.NETCore.App.Crossgen2.win-x64。源 Microsoft Visual Studio Off
    问题找不到包System.IO.Packaging,源MicrosoftVisualStudioOffilinePackages中不存在具有此ID的包 解决打开工具-Nuget相关可以尝试再命令行里用 nugetrestore但是这种情况应该是没有设置源。在选项里面,新建一个程序包源,填写以下源地址(或者其他nuget源)就能修复。......
  • 10 个解放双手的 IDEA插件,少些冤枉代码(第三弹)
    大家好,我是小富~好久没发这种实用贴了,最近用到了一些能提升工作效率的IDEA插件,给小伙伴们分享一下。相信我,我分享的这些插件,都是实实在在能解决实际开发场景中痛处的。以往的两篇IDEA插件分享:10个解放双手的IDEA插件,少些冤枉代码10个解放双手的IDEA插件,这些代码真不用手写......
  • 客户说|从4小时到15分钟,一次分布式数据库的丝滑体验
    文/识货运维总监瞿晟荣识货APP致力于为广大用户提供专业的网购决策指导,为喜欢追求性价比的网购朋友带来及时劲爆的运动、潮流、生活、时尚等网购优惠资讯,产品覆盖国内外主流购物商城。它提供了全球范围内的时尚品牌、潮流单品的信息,帮助用户发现和购买最新、最热、最具性价......
  • Android 《回到桌面与切换到任务列表》
    App不但能监测手机屏幕的方向变更,还能获知回到桌面的事件,连打开任务列表的事件也能实时得知。回到桌面与打开任务列表都由按键触发,例如按下主页键会回到桌面,按下任务键会打开任务列表。虽然这两个操作看起来属于按键事件,但系统并未提供相应的按键处理方法,而是通过广播发出事件信......
  • Android 《屏幕切换》
    默认处理机制除了系统广播之外,App所处的环境也会影响运行,比如手机有竖屏与横屏两种模式,竖屏时水平方向较短而垂直方向较长,横屏时水平方向较长而垂直方向较短。两种屏幕方向不但造成App界面的展示差异,而且竖屏和横屏切换之际,甚至会打乱App的生命周期。无需重启Activity横竖屏......
  • idea的local history找回git没有push的分支
    git本地项目分支没有push到远程,本地切换分支,删掉本地项目重新远程clone,导致本地没有push的分支丢失。gitclone远程项目在idea找到localhistory,在localhistory可以找到最后一次commit的提交记录:这样删除的代码就能完整找回。......
  • Android 获取设备的CPU型号和设备型号
    原文:Android获取设备的CPU型号和设备型号-Stars-One的杂货小窝之前整的项目的总结信息,可能不太全,凑合着用吧,代码在最下面一节CPU型号数据华为:ro.mediatek.platformvivo:ro.vivo.product.platformoppo:ro.board.platform或ro.product.board三星:ro.board.pla......
  • Android 获取设备的亮度百分比
    一般的屏幕亮度都是0-255,而小米手机的高版本不一样为了使亮度调节更加细腻,MIUI对原生亮度级别进行了扩展,由原有的255级调整根据不同屏幕分别支持255/1023/2047/4095级。开发者在进行亮度调整时需要先去确认机型亮度的最大值和最小值,然后进行比例调整。计算屏幕亮度fung......