Adobe Commerce Cloud中订单的非顺序递增ID
在Adobe Commerce Cloud Pro中,订单、发票、发运和其他实体增量ID会以100000001 → 100000004 → 100000007等步骤进行递增,而不是以1为单位递增。 出现此行为的原因是Cloud Pro环境中使用了Galera多节点数据库架构。 要解决此问题,请将增量ID仅视为唯一标识符,并避免依赖顺序编号。
描述 description
环境
带有多节点MySQL(Galera群集)的Cloud Pro上的Adobe Commerce
问题/症状
商家观察到以下增量ID:
- 增加步骤(通常为+3)
- 不要遵循严格的顺序
- 跳过值
这些行为引起了人们的关注:
- 面向客户的订单编号
- 内部报告
- 审核和合规性要求
原因
Cloud Pro环境使用3节点Galera群集来支持高可用性和数据一致性。
为了防止并发写入期间出现主键冲突, MySQL使用以下配置:
auto_increment_increment = 3auto_increment_offset = {1,2,3}(每个节点)
每个节点按自己的顺序独立生成ID。 例如:
- 节点1 → 1、4、7、10…
- 节点2 → 2、5、8、11…
- 节点3 → 3、6、9、12…
因此,增量ID为:
- 全局唯一
- 作为单个流查看时的非顺序
预期行为
- 不能保证增量ID遵循一个序列。
- 间隙和步长增加是正常的。
- 此行为适用于所有使用自动增量的实体。
由于以下原因,在群集环境之外也会发生此行为:
- 失败的事务
- 回滚
- 并发操作
影响
- 系统功能和数据完整性不受影响。
- ID对于所有Adobe Commerce Cloud操作都保持唯一和有效状态。
- 只有顺序编号预期会受到影响。
解决方法 resolution
要解决此问题,请执行以下步骤:
-
避免依赖顺序增量ID。
-
将增量ID视为唯一标识符,而不是排序的值。
-
要订购和报告,请使用:
created_at时间戳- 实体关系或业务逻辑
-
-
更新报告和审核工具。
-
如果您的工具要求严格排序:
- 更新逻辑以处理非连续ID。
- 删除对数值连续性的依赖性。
-
-
实施自定义排序(如果需要)。
-
如果您的业务要求严格按顺序编号:
- 创建自定义序列生成器(例如,自定义模块)。
- 将该值存储为单独的属性(不要替换增量ID)。
- 使用适当的锁定以防止出现争用情况。
-
最佳实践
将增量ID视为车牌,而不是票证计数器:
- 它们唯一地标识项目
- 他们不能保证秩序
结论
Cloud Pro中的非顺序增量ID是平台分布式数据库设计的直接结果。 这可确保可扩展性和可靠性,但意味着在基础架构级别不支持严格排序。 对于需要连续编号的用例,需要自定义或外部解决方案。
相关阅读
recommendation-more-help
experience-cloud-kcs-help-kbarticles