文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

关于主键的知识点有哪些

2024-04-02 19:55

关注

本篇内容介绍了“关于主键的知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

1. UUID模式

通用唯一识别码(Universally Unique  Identifier),根据标准方法生成,不依赖中央机构的注册和分配,UUID具有唯一性重复UUID码概率接近零,可以忽略不计。UUID具有多个版本:基于时间的UUID、DCE安全的UUID、基于名字的UUID(MD5)(UUID.nameUUIDFromBytes())、随机UUID(UUID.randomUUID().toString())、基于名字的UUID(SHA1),Version  1/2适合应用于分布式计算环境下,具有高度的唯一性;Version 3/5适合于需要相同内容生成相同UUID的业务场景下;Version  4建议不要使用(随机数有可能出现重复,但是重复的概率极低,在设计时需要考虑到这一点)。

UUID虽然解决了依赖于数据库生成主键的策略,但是也存在一些不足:占用存储空间大;随机生成,不具有连续性,作为主键时性能较差;无法根据主键进行排序,确定记录插入的先后顺序;对于开发人员不友好;如果生成过程中使用了机器MAC地址,存在一定安全隐患。

2. 步长模式

即Flickr的sharding主键生成方案。使用多台数据库服务器,通过设置不同的起始值、一致自增步长,让每个数据库中各表主键保持唯一。如图所示:

步长方式在一定程度上解决了高并发的问题,但是也存在一些问题如:扩展困难,设置好步长后,再进行扩展将会比较困难;ID并不是按顺序严格单调递增的特性,只是趋势递增;每次获取ID仍然需要读写一次数据库,仍然存在瓶颈。

关于主键的知识点有哪些

3. 号段模式

即每次从数据库获取id时,从数据库取到当前id最大值,然后返回max+step,当应用程序用完这个号段后,再从数据库获取下一个长度为step的号段。为此需要专门设计一张用以记录id的表,在应用服务为集群,而主键服务器为单点时,多个应用服务节点同时获取id时,会产生冲突,可以增加version字段从而使用乐观锁进行并发访问控制。

关于主键的知识点有哪些

号段模式将主键缓存在应用服务端,从而减少对数据库的访问频率;在数据库数据库不可用时,应用服务仍然可以持续运行一段时间直到当前号段用完;但是在应用服务重启时有可能丢失部分id,导致id增长不连续。

基于号段模式有一些成熟方案,且经过实践验证:美团的Leaf-segment对号段发放方式进行了双buffer缓存及高可用容灾优化。采用双buffer模式,在当前号段消费到某个点时就异步的把下一个号段加载到内存中。而不需要等到号段用尽的时候才去更新号段,不会在应用服务器向数据库请求id时,因为id号段没有取回来,导致线程阻塞。

滴滴的TinyId参照了美团Leaf的实现方式,并对其做了扩展,增加了多db支持和tinyid-client。

4. snowflake模式(雪花算法)

Twitter实现的分布式ID生成算法。结构如下:0-00000000000000000000000000000000000000000-00000-00000-000000000000

关于主键的知识点有哪些

snowflake的优点:

snowflake的缺点:

美团的Leaf-snowflake,使用zk解决了snowflake依赖于时钟,时间回拨产生重复主键问题;百度的UidGenerator,支持自定义时间戳、workerId、序列号等。

5. Redis模式

利用Redis原子操作INCR和INCRBY来实现,使用Redis集群提高并发量,与步长模式类似,只不过将id生成器由传统数据库换成效率更高的Redis数据库。但是当Redis重启或者宕机,记录主键值会丢失,所以利用Redis进行主键生成时需要对当前主键值进行持久化。Redis支持RDB和AOF两种持久化机制。RDB模式下,可能会丢失部分未打镜像的数据,根据快照恢复后会产生部分重复ID,故RDB不适合实施持久化Redis数据场景。AOF以独立日志记录每次写命令,重启时执行日志中的命令进行数据恢复,不会出现ID重复现象,但是会由于备份命令过多,导致Redis恢复数据时间较长。

以上介绍了五种数据库主键的生成策略,大家可以根据具体业务场景和系统实际情况选择一款最适合自己的主键策略,提升数据库性能,保证在高并发情况下系统运行稳定性。

“关于主键的知识点有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯