`
snoopy7713
  • 浏览: 1149727 次
  • 性别: Icon_minigender_2
  • 来自: 火星郊区
博客专栏
Group-logo
OSGi
浏览量:0
社区版块
存档分类
最新评论

自增序列产生器的实现思路

阅读更多

l   需求

u  实现MySQL自带的字段值自动增长等效的功能;

u  同一应用集群中数据库表的自增类型字段值具有全局唯一性;

u  支持数据库级别的水平拆分表,同时还需要支持数据库内部的水平拆分表,其ID值都来源于同一条配置记录;

l   存储设计

序列产生器配置表increment_config结构:

列名称 数据类型 是否为空 默认值 是否自增 主键/索引 备注
ID INT UNSIGNED N AUTO_INCREMENT PRIMARY KEY(ID) 唯一标示,无意义
TABLE_NAME VARCHAR(40) N UNIQUE INDEX 表名称
TABLE_TOTAL TINYINT UNSIGNED N 0 标记数据库内分表的数量
COLUMN_NAME VARCHAR(40) N 字段名称
START_VALUE BIGINT UNSIGNED N 1 开始值
OFFSET_VALUE SMALLINT UNSIGNED N 10000 增长的步长
FLAG TINYINT N 0 0–正常;1–作废值
GMT_MODIFIED TIMESTAMP N 数据库自动更新此值

备注:

1>. GMT_MODIFIED不由程序或人为主动去负责更新与填写,而是通过数据库的特性自动填写与更新;

2>. 对于数据库内部的水平分表,即TABLE_TOTAL<>0,则通过TABLE_NAME+TABLE_TOTAL组合区分;

l   对存储表的操作

初始化的 SQL

对于需要用到序列产生器的表,则在此配置表中增加一条记录,例如:

INSERT INTO(TABLE_NAME,TABLE_TOTAL,COLUMN_NAME,START_VALUE,OFFSET_VALUE,FLAG)

VALUES(‘msg_’,23, ’MSG_ID’,1,10000,0);

序列生成器操作的 SQL

程序每次获得序列区间段,以及更新相关数据值操作的事务的过程SQL,假设msg_系列表对应的记录,在配置表中ID=1。

START  TRNSACTION;

SELECT  ID, TABLE_NAME,COLUMN_NAME,START_VALUE,START_VALUE+OFFSET_VALUE AS END_VALUE

FROM  increment_config  WHERE ID=1 FOR UPDATE;

UPDATE  increment_config  SET  START_VALUE=START_VALUE+OFFSET_VALUE WHERE  ID=1;

COMMIT;

l   程序实现建议

u  为提供序列产生的速度,而提高业务处理的性能。程序需要以拿序列区间的方式实现,而不是每次需要的时候,都要去数据库获得序列号值;

u  程序在每次启动的时候,要初始化配置表中所有有效记录的序列区间值;

u  当程序拿到的区间值START_VALUE,经过一段时间使用后达到:START_VALUE=END_VALUE,处理步骤如下:

1>. 挂起当前的序列调用请求;

2>. 做序列区间值获取的事务;

3>. 把新获得区间值的START_VALUE,给予挂起的调用请求;

总结:每个区间值的最大值(END_VALUE)始终作为当前期间的弃用值。

分享到:
评论

相关推荐

    ruoyi-postgresql设置自增序列.sql

    ruoyi框架集成postgresql,对自增表设置序列

    oracle自增序列

    在数据库应用中,序列是一种常用的数据对象,它能够自动产生唯一的数值,常用于实现表中的主键自增功能。Oracle数据库提供了强大的序列管理功能,可以方便地创建、管理和使用序列。本文将详细介绍如何在Oracle数据库...

    MyBatis Oracle 自增序列的实现方法

    在Oracle数据库中,由于没有像MySQL的`auto_increment`或者SQL Server的`IDENTITY`这样的内置机制,所以自增序列的实现通常需要借助于Oracle的`SEQUENCE`对象。MyBatis,作为一个强大的ORM(对象关系映射)框架,...

    Oracle自增序列和触发器生成工具.zip

    Oracle数据库在设计关系型数据库时,常常需要使用到自增序列和触发器来实现自动增长的主键。自增序列可以确保数据的唯一性,而触发器则可以在特定事件(如INSERT、UPDATE或DELETE)发生时执行一些额外的操作。本...

    oracle通过触发器,实现序列自增

    ### Oracle通过触发器实现序列自增 在Oracle数据库中,序列是一种非常实用的对象,它可以用于自动产生唯一的数值。本文将详细介绍如何通过触发器与序列相结合的方式,在Oracle数据库中实现记录的自增功能。 #### ...

    扩频通信中PN序列产生器的设计

    扩频通信中PN序列产生器的设计是通信领域的一个重要课题,尤其在课设或项目实践中。PN序列,也称为伪随机噪声序列,是扩频通信系统的基础,它们用于调制信号,以达到抗干扰、保密通信的目的。在这个设计任务中,主要...

    oracle迁移mysql自增序列问题

    Oracle数据库中,自增序列通常通过Sequence对象实现,而MySQL则通过在表定义中设置`AUTO_INCREMENT`属性来实现自增主键。 在描述中,我们看到一个具体的例子,首先创建了一个名为`test`的MySQL表,包含两个字段:`...

    在MySQL中创建实现自增的序列(Sequence)的教程

    在MySQL中,自增序列(Sequence)是一种常用于生成唯一标识符的数据结构,尤其是在Oracle数据库中广泛使用。然而,MySQL自身并不直接支持Sequence,但可以通过创建表和存储过程来模拟这个功能。本教程将详细解释如何...

    基于SIMULINK的M序列产生器

    基于SIMULINK的M序列产生器 M 序列是一种典型的伪随机序列,在数字通信技术中具有广泛的应用。伪随机序列在误码率测量、时延测量、扩谱通信、密码及多径分离等方面都具有重要的作用。以下是关于M序列的知识点总结:...

    java快速ID自增器

    Java中的快速ID自增器通常是通过以下几种方式实现的: 1. **原子类**:Java的`AtomicLong`类是线程安全的,可以用于实现自增ID。每次获取新ID时,只需要调用`incrementAndGet()`方法,该方法会原子性地增加当前值并...

    Oracle数据库表序列ID自增生成器

    总结来说,Oracle数据库表序列ID自增生成器结合了序列和触发器的概念,实现了主键ID的自动增长。这种机制在处理大量数据和并发操作时,能确保数据的完整性和一致性。了解并熟练运用这些知识点,对于进行高效的Oracle...

    FSK m序列产生器

    标题中的“FSK m序列产生器”指的是使用FSK(Frequency Shift Keying,频率移键调制)技术的m序列生成模块。FSK是一种常见的数字调制方式,它通过改变载波频率来传递数字信息。在无线通信、数据传输等领域广泛应用。...

    长序列卷积的实现 长序列卷积的实现 长序列卷积的实现 长序列卷积的实现

    长序列卷积的实现 长序列卷积的实现 长序列卷积的实现 长序列卷积的实现 长序列卷积的实现 长序列卷积的实现

    Oracle使用序列创建自增字段

    Oracle 数据库通过序列(Sequence)这一特性支持自增字段的实现。本文将详细介绍如何利用 Oracle 的序列功能来创建自增字段,并探讨其相关的配置选项及应用场景。 ### 创建序列 (Create Sequence) #### 基本语法与...

    oracle中如何实现ID自增

    在Oracle数据库中,实现ID自增的一种常见方法是通过结合使用序列(Sequence)和触发器(Trigger)。这种方法非常实用,特别是在需要为表中的记录自动生成唯一标识符的情况下。 ##### 创建序列(Sequence) 首先,...

    mysql自增字段重排 mysql删除表后自增字段从1开始.pdf

    - 在MyISAM之外的数据表类型中,如InnoDB,可以通过创建包含自增字段的复合索引来实现多个独立的自增序列,前提是前面的字段组合确保唯一性。 6. **不同存储引擎的差异**: - MyISAM不重用删除的最大编号,而BDB...

    序列检测器.rar_序列检测器

    7. **软件实现**:描述中提到的“序列检测器.docx”文档可能包含程序的详细描述、算法流程图或者代码实现。阅读这份文档可以帮助我们理解序列检测器的具体工作原理和实现细节。 综上所述,序列检测是一个涵盖广泛IT...

    oracle序列主键自增长

    下面将详细介绍如何利用Oracle序列来实现主键的自增长。 #### 一、创建序列 **基本语法** 首先,我们需要创建一个序列。以下是一个基本的创建序列的语法结构: ```sql CREATE SEQUENCE 序列名 INCREMENT BY 增量...

    Oracle在表上建立自增字段的方法

    本方法为使用SEQUENCE...  1、建立自增序列TEMP_TEST_IDADD,命名任意,从1开始,每次加1  CREATE SEQUENCE TEMP_TEST_IDADD INCREMENT BY 1 START WITH 1;  2、在表temp_test上建立触发器如下  CREATE OR REPL

    序列检测器1

    在实验中,你需要用VHDL实现两个序列产生器,一个产生预设序列“111010011”,另一个则不产生。序列产生可以视为有限状态机,它具有多个状态,每个状态对应一个输出,根据状态转换规则产生序列。 状态机在本实验中...

Global site tag (gtag.js) - Google Analytics