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 = 3
  • auto_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

要解决此问题,请执行以下步骤:

  1. 避免依赖顺序增量ID。

    • 将增量ID视为唯一标识符,而不是排序的值。

    • 要订购和报告,请使用:

      • created_at时间戳
      • 实体关系或业务逻辑
  2. 更新报告和审核工具。

    • 如果您的工具要求严格排序:

      • 更新逻辑以处理非连续ID。
      • 删除对数值连续性的依赖性。
  3. 实施自定义排序(如果需要)。

    • 如果您的业务要求严格按顺序编号:

      • 创建自定义序列生成器(例如,自定义模块)。
      • 将该值存储为单独的属性(不要替换增量ID)。
      • 使用适当的锁定以防止出现争用情况。

最佳实践

将增量ID视为车牌,而不是票证计数器:

  • 它们唯一地标识项目
  • 他们不能保证秩序

结论

Cloud Pro中的非顺序增量ID是平台分布式数据库设计的直接结果。 这可确保可扩展性和可靠性,但意味着在基础架构级别不支持严格排序。 对于需要连续编号的用例,需要自定义或外部解决方案。

相关阅读

recommendation-more-help
experience-cloud-kcs-help-kbarticles