You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

$Increment与$Sequence函数的区别及适用场景对比

以下讨论基于Intersystems Caché/IRIS及MUMPS语言环境下的$Increment(常简写为$IN)和$Sequence(常简写为$SEQ)函数:

核心区别
  • 并发处理逻辑不同
    $Increment是原子操作,单步完成读取变量当前值、加1、回写新值、返回新值的全流程,多进程同时操作同一个全局变量时不会出现冲突,所有进程拿到的都是唯一递增的值,但高并发下会出现明显的锁竞争,性能下降明显。
    $Sequence是专为高并发场景设计的实现,会给每个进程预先分配一段连续的数值区间,进程直接在自己的专属区间内取值,不需要每次都修改全局变量的根节点,锁竞争极少,高并发下性能远高于$Increment。
  • 数值连续性保证不同
    $Increment返回的数值是严格连续的,只要操作成功,每次调用返回的值比上一次大1,不会出现断层。
    $Sequence不保证严格连续:如果进程分配了区间没用完就退出,剩余的数值就会被浪费,最终生成的序列会有空缺;而且不同进程拿到的数值可能不是按调用顺序递增的,比如进程A先调用拿到101,进程B后调用可能拿到201(因为B分配的是200-300的区间)。
  • 支持的变量范围不同
    $Increment可以操作局部变量、进程私有全局变量、普通全局变量。
    $Sequence只能操作普通全局变量,不支持局部变量和进程私有全局变量。
  • 事务回滚行为不同
    $Increment的操作受事务回滚影响:如果事务回滚,$Increment对变量的修改会被撤销,已经返回过的值会被重新分配。
    $Sequence的操作不受事务回滚影响:就算调用$Sequence的事务回滚了,已经返回过的值也不会再被复用,避免了并发场景下主键重复的问题。

注意:如果是其他语言环境下的同名函数,行为可能存在差异,以上结论仅针对MUMPS体系下的这两个函数。

适用场景选择指南
  • 优先选$Increment的场景:
    • 对序列连续性要求极高,不能存在空缺,比如财务凭证编号、法定流水号要求必须连续无断号的场景
    • 业务并发量不高,不会出现明显锁竞争的场景
    • 需要对局部变量/进程私有变量做递增操作的场景
    • 接受事务回滚后数值被复用的场景
  • 优先选$Sequence的场景:
    • 高并发场景下生成唯一主键、订单ID这类只要求数值唯一、不要求严格连续的场景
    • 希望避免事务回滚导致主键重复的场景
    • 并发量较大,用$Increment已经出现性能瓶颈的业务

内容的提问来源于stack exchange,提问作者Muhammad Waseem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 03:06:04