mysql实现流水码

java: 

/** 
    * @Description: 根据长度获取流水号
    * @Param: [length] 
    * @return: java.lang.String 
    * @Author: yusy
    * @Date: 2019/5/31 
    */ 
    @Override
    public String getSequenceNextValue(int length){
        String sequenceName = "SEQ_"+length;
        Integer no =  baseDao.getSequenceNextValue(sequenceName);
        if(no != null) {
            return String.format("%0" + length + "d", no);
        }else{
            return null;
        }
    }


@Override
    public Integer getSequenceNextValue(String sequenceName){
        String sql =  "SELECT NEXTVAL('"+sequenceName+"');";
        Query query = entityManager.createNativeQuery(sql);
        String rangeValue = "99999999999999999";
        Integer maxValue = Integer.parseInt(rangeValue.substring(0,Integer.parseInt(sequenceName.substring(sequenceName.length() -1))));
        List list = query.getResultList();
        if(list != null && list.size() > 0){
            int no = (Integer)list.get(0);
            if(no >= maxValue){
                String sqlSet = "SELECT SETVAL('"+sequenceName+"', 1);";
                query = entityManager.createNativeQuery(sqlSet);
                query.getResultList();
            }
            return no;
        }
        return null;
    }

mysql:建表,并且分别建立4、6、8位数的流水码数据条目

CREATE TABLE `sequence` (
  `name` varchar(50) NOT NULL,
  `current_value` int(11) NOT NULL,
  `increment` int(11) NOT NULL DEFAULT '1',
  PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;



INSERT INTO `chinaff_new`.`sequence`(`name`, `current_value`, `increment`) VALUES ('SEQ_4', 0, 1);
INSERT INTO `chinaff_new`.`sequence`(`name`, `current_value`, `increment`) VALUES ('SEQ_6', 0, 1);
INSERT INTO `chinaff_new`.`sequence`(`name`, `current_value`, `increment`) VALUES ('SEQ_8', 0, 1);

 mysql:函数

CREATE DEFINER=`root`@`%` FUNCTION `currval`(seq_name VARCHAR(50)) RETURNS int(11)
    DETERMINISTIC
BEGIN
     DECLARE value INTEGER; 
     SET value = 0; 
     SELECT current_value INTO value 
          FROM sequence
          WHERE name = seq_name; 
     RETURN value; 
END


CREATE DEFINER=`root`@`%` FUNCTION `nextval`(seq_name VARCHAR(50)) RETURNS int(11)
    DETERMINISTIC
BEGIN
     UPDATE sequence
          SET current_value = current_value + increment 
          WHERE name = seq_name; 
     RETURN currval(seq_name); 
END

CREATE DEFINER=`root`@`%` FUNCTION `setval`(seq_name VARCHAR(50), value INTEGER) RETURNS int(11)
    DETERMINISTIC
BEGIN
     UPDATE sequence
          SET current_value = value 
          WHERE name = seq_name; 
     RETURN currval(seq_name); 
END

 

 

 

 

 

FlinkCDC MySQL to MySQL是一个基于Apache Flink的流处理框架,用于从MySQL数据库的一个实例读取数据变更事件,并将这些事件推送到另一个MySQL数据库。它主要用于实时数据同步、数据分析、实时报表生成等领域。 ### FlinkCDC MySQL to MySQL 的工作原理 1. **变更数据捕获**:使用FlinkCDC(Change Data Capture),它能够监听源MySQL数据库中的表更改事件(如插入、更新、删除等)。Flink提供了一个连接器,通过这个连接器,Flink可以与MySQL建立通信并获取这些事件。 2. **事件传输**:捕获到的事件通过Flink的流处理引擎进行处理和转换,可以包括过滤不必要的事件、批量事件发送以减少网络开销等功能。 3. **目标库写入**:经过处理后的事件被写入到目标MySQL数据库对应的表中。这通常涉及创建一个新的表结构来存储来自源表的所有变更事件,以便于历史查询和分析。 ### 主要特性与优势 - **实时性**:允许近乎实时的数据复制,对于需要即时响应的应用非常关键。 - **高可用性和容错性**:通过Flink的容错机制,如果中间环节出现故障,系统能够自动恢复丢失的数据。 - **灵活性**:支持多种SQL操作和数据格式转换,适用于构建复杂的数据流水线。 ### 使用场景 - **数据集成**:快速实现两个数据库之间的数据同步,例如从旧版本数据库迁移数据至新版本数据库。 - **实时数据分析**:将数据库的实时变化数据推送至大数据平台(如Hadoop集群),用于实时数据分析。 - **业务监控**:对数据库的操作进行实时监控,及时发现异常情况。 ### 实现步骤简述 1. **配置FlinkCDC连接器**:设置Flink与MySQL的连接信息,包括主机名、端口、用户名、密以及指定监听的表。 2. **编写数据流程序**:利用Flink提供的API定义从MySQL接收变更事件并将其发送到目标MySQL的过程。 3. **运行和监控**:部署Flink应用并开始数据同步流程,同时设置日志和监控机制确保流程稳定运行。 4. **调整优化**:根据实际需求和性能指标进行必要的调整,比如改变事件批处理大小、增加并发度等。 ### 相关问题: 1. **如何配置FlinkCDC MySQL连接器以实现高效的数据同步?** 2. **在实现FlinkCDC MySQL to MySQL时,如何处理并发冲突?** 3. **在使用FlinkCDC进行MySQLMySQL的数据同步过程中,可能出现哪些常见错误及其解决策略是什么?**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值