开发指南—Sequence—使用限制

简介: 本文将介绍使用Sequence过程中的注意事项及问题处理的方法。

限制与注意事项

在使用Sequence时,您需要注意如下事项:

  • 转换Sequence类型时,必须指定START WITH起始值。
  • 单元化Group Sequence不支持作为源或目标的类型转换,也不支持起始值以外的参数修改。
  • 属于同一个全局唯一数字序列分配空间的每个单元化Group Sequence ,必须指定相同的单元数量和不同的单元索引。
  • PolarDB-X非拆分模式库(即后端仅关联一个已有的RDS物理库)、或拆分模式库中仅有单表(即所有表都是单库单表,且无广播表)的场景下执行INSERT时, PolarDB-X会自动优化并直接下推语句,绕过优化器中分配Sequence值的部分。此时INSERT INTO ... VALUES (seq.nextval, ...)这种用法不支持,建议使用后端RDS/MySQL自增列机制代替。
  • 如果将指定分库的Hint用在INSERT语句上,比如INSERT INTO ... VALUES ... 或INSERT INTO ... SELECT ...,且目标表使用了Sequence,则PolarDB-X会绕过优化器直接下推语句,使Sequence不生效,目标表最终会使用后端RDS/MySQL表中的自增机制生成id。
  • 必须对同一个表采用一种统一的方式分配自增id:或者依赖于Sequence,或者依赖于后端RDS/MySQL表的自增列;应避免两种机制混用,否则很可能会造成id冲突(INSERT时产生重复id)的情况,且难于排查。
  • 将Time-based Sequence用于表中自增列时,该列必须使用BIGINT类型。

如何处理主键冲突

如果直接在RDS中写入了数据,而对应的主键值不是PolarDB-X生成的Sequence值,那么后续让PolarDB-X自动生成主键写入数据库,可能会和这些数据发生主键冲突,您可以通过如下步骤解决此问题:

  1. 通过SHOW SEQUENCES来查看当前已有Sequence。AUTO_SEQ_ 开头的Sequence是隐式Sequence(创建表时加上AUTO_INCREMENT参数的字段产生的Sequence)。请在命令行输入如下代码:
mysql> SHOW SEQUENCES;
  1. 返回结果如下:
+---------------------+-------+--------------+------------+-----------+-------+-------+ 
| NAME                | VALUE | INCREMENT_BY | START_WITH | MAX_VALUE | CYCLE | TYPE  | 
+---------------------+-------+--------------+------------+-----------+-------+-------+ 
| AUTO_SEQ_xkv_t_item | 0     | N/A          | N/A        | N/A       | N/A   | GROUP | 
| AUTO_SEQ_xkv_shard  | 0     | N/A          | N/A        | N/A       | N/A   | GROUP | 
+---------------------+-------+--------------+------------+-----------+-------+-------+ 
2 rows in set (0.04 sec)
  1. 若xkv_t_item表有冲突,并且xkv_t_item表主键是ID,那么从PolarDB-X获取这个表最大主键值。请在命令行输入如下代码:
mysql> SELECT MAX(id) FROM xkv_t_item;
  1. 返回结果如下:
+-----------+ 
| MAX(id)   | 
+-----------+ 
| 8231      | 
+-----------+ 
1 row in set (0.01 sec)
  1. 更新Sequence表中对应的值,这里更新成比8231要大的值,比如9000,更新完成后,后续插入语句生成的自增主键将不再报错。请在命令行输入如下代码:
mysql> ALTER SEQUENCE AUTO_SEQ_xkv_t_item START WITH 9000;
相关文章
|
NoSQL 物联网 存储
IoT+Tablestore快速构建智能售货机应用
### 一、 背景介绍         近年来,物联网(IoT)技术发生了巨大的变化。NB-IoT、LoRa等技术的产生解决了网络覆盖、设备功耗成本问题;尤其是最近5G技术的商用,意味着支持海量设备连接进行高质量数据通讯即将有坚实的基础设施支持。
|
存储 数据可视化 关系型数据库
Apache Doris-部署
建议使用使用 Docker 开发镜像编译
1468 0
Apache Doris-部署
|
4月前
|
机器学习/深度学习 人工智能 运维
运维告警别乱飞了!AI智能报警案例解析
运维告警别乱飞了!AI智能报警案例解析
507 0
|
10月前
|
前端开发
如何在React Router中进行嵌套路由配置?
如何在React Router中进行嵌套路由配置?
510 57
|
12月前
|
机器学习/深度学习 弹性计算 人工智能
阿里云服务器ECS架构区别及选择参考:X86计算、ARM计算等架构介绍
在我们选购阿里云服务器的时候,云服务器架构有X86计算、ARM计算、GPU/FPGA/ASIC、弹性裸金属服务器、高性能计算可选,有的用户并不清楚他们之间有何区别,本文主要简单介绍下这些架构各自的主要性能及适用场景,以便大家了解不同类型的架构有何不同,主要特点及适用场景有哪些。
1689 10
|
Java Shell Linux
【Linux入门技巧】新员工必看:用Shell脚本轻松解析应用服务日志
关于如何使用Shell脚本来解析Linux系统中的应用服务日志,提供了脚本实现的详细步骤和技巧,以及一些Shell编程的技能扩展。
340 0
【Linux入门技巧】新员工必看:用Shell脚本轻松解析应用服务日志
|
机器学习/深度学习 存储 监控
实时特征处理框架:构建与应用实践
在大数据时代,实时特征处理框架成为数据驱动应用的核心组件。这些框架能够从海量数据中提取特征,并实时更新,为机器学习模型提供动力。本文将探讨实时特征框架的构建和生产实践,分享如何构建一个高效、稳定的实时特征处理系统。
277 2
|
运维 关系型数据库 MySQL
掌握taskset:优化你的Linux进程,提升系统性能
在多核处理器成为现代计算标准的今天,运维人员和性能调优人员面临着如何有效利用这些处理能力的挑战。优化进程运行的位置不仅可以提高性能,还能更好地管理和分配系统资源。 其中,taskset命令是一个强大的工具,它允许管理员将进程绑定到特定的CPU核心,减少上下文切换的开销,从而提升整体效率。
掌握taskset:优化你的Linux进程,提升系统性能
|
消息中间件 Prometheus 监控
RabbitMQ性能调优指南
【8月更文第28天】RabbitMQ 是一个非常流行的消息队列中间件,它支持多种消息协议,并且可以轻松集成到各种系统中。随着应用的扩展,确保 RabbitMQ 在高负载环境下能够高效稳定地运行变得至关重要。本文将深入探讨如何通过配置、监控以及最佳实践来优化 RabbitMQ 的性能。
2297 1
|
机器学习/深度学习 自然语言处理
彻底改变语言模型:全新架构TTT超越Transformer,ML模型代替RNN隐藏状态
【7月更文挑战第25天】近年来,NLP领域取得显著进展但也面临挑战,如长上下文建模与计算效率的平衡。为此,研究人员提出Test-Time Training (TTT) 模型架构。TTT由多机构合作开发,旨在解决长上下文建模难题及提高计算效率。通过将隐藏状态视为可学习更新的模型,TTT能随输入增长提升表示能力;采用自监督学习更新规则确保线性计算复杂度的同时保持高性能。实验显示TTT在多种NLP任务中表现优秀,尤其在长上下文处理方面超越Transformer。尽管如此,TTT仍面临训练资源需求高及自监督学习鲁棒性等挑战。[论文](https://arxiv.org/abs/2407.04620)
503 5