位置: 编程技术 - 正文
推荐整理分享基于Mysql的Sequence实现方法(基于mysql的sql应用),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:基于mysql的国产数据库,mysql sequences,mysql的sequence,基于mysql的sql应用,基于mysql的智能公交站台设计,基于mysql的国产数据库,基于mysql的国产数据库,基于mysql的数据库,内容如对您有帮助,希望把文章链接给更多的朋友!
团队更换新框架。新的业务全部使用新的框架,甚至是新的数据库--Mysql。
这边之前一直是使用oracle,各种订单号、流水号、批次号啥的,都是直接使用oracle的sequence提供的数字序列号。现在数据库更换成Mysql了,显然以前的老方法不能适用了。
需要新写一个:
分布式场景使用
满足一定的并发要求
找了一些相关的资料,发现mysql这方面的实现,原理都是一条数据库记录,不断update它的值。然后大部分的实现方案,都用到了函数。
贴一下网上的代码:
基于mysql函数实现
表结构
获取下一个值
并发场景有可能会出问题,虽然可以在业务层加锁,但分布式场景就无法保证了,然后效率应该也不会高。
自己实现一个,java版
原理:
读取一条记录,缓存一个数据段,如:0-,将记录的当前值从0修改为
数据库乐观锁更新,允许重试
读取数据从缓存中读取,用完再读取数据库
不废话,上代码:
基于java实现
表结构
每次update,都是将SEQ_VALUE设置为SEQ_VALUE+STEP
sequence接口
序列区间
用于本地缓存一段序列,从min到max区间
BO
对应数据库记录
DAO
增删改查,其实就用到了改和查
Mapper
接口实现
工厂
工厂只做了两件事
服务启动的时候,初始化数据库中所有sequence【完成序列区间缓存】
获取sequence的下一个值
单一sequence的Holder
init() 初始化 其中包括参数校验,数据库记录更新,创建序列区间
getNextVal() 获取下一个值
总结
当服务重启或异常的时候,会丢失当前服务所缓存且未用完的序列
分布式场景,多个服务同时初始化,或者重新获取sequence时,乐观锁会保证彼此不冲突。A服务获取0-,B服务会获取-,以此类推
当该sequence获取较为频繁时,增大step值,能提升性能。但同时服务异常时,损失的序列也较多
修改数据库里sequence的一些属性值,比如step,max等,再下一次从数据库获取时,会启用新的参数
sequence只是提供了有限个序列号(最多max-min个),达到max后,会循环从头开始。
由于sequence会循环,所以达到max后,再获取,就不会唯一。建议使用sequence来做业务流水号时,拼接时间。如:+序列号
业务id拼接方法
以上这篇基于Mysql的Sequence实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持积木网。
MySQL5.5.安装图文教程 一、MYSQL的安装1、打开下载的mysql安装文件mysql-5.5.-win.zip,双击解压缩,运行setup.exe2、选择安装类型,有Typical(默认)、Complete(完全)、Custom(
详解java调用ffmpeg转换视频格式为flv 详解java调用ffmpeg转换视频格式为flv注意:下面的程序是在Linux下运行的,如果在windows下rmvb转换成avi会出现问题,想成功需要下载下个drv.dll东西放到
MySQL curdate()函数的实例详解 MySQLCURDATE功能介绍如果在数字上下文中使用字符串上下文或YYYMMDD格式,CURDATE()函数将以YYYY-MM-DD格式的值返回当前日期。以下示例显示了如何在字符串上
标签: 基于mysql的sql应用
本文链接地址:https://www.jiuchutong.com/biancheng/348639.html 转载请保留说明!上一篇:MySQL5.7免安装版配置图文教程(mysql 免安装版)
下一篇:MySQL5.5.27安装图文教程(mysql5.7.22安装教程图解)
友情链接: 武汉网站建设