【GUID】MySQL全局唯一ID选型方案解析:从 InnoDB 存储机制到分布式架构的演进

【GUID】MySQL全局唯一ID选型方案解析:从 InnoDB 存储机制到分布式架构的演进

一、核心矛盾:InnoDB 聚簇索引的物理约束

MySQL InnoDB 引擎采用聚簇索引(Clustered Index)组织数据,主键不仅决定逻辑唯一性,更直接决定数据的物理存储顺序。这一底层机制是 ID 选型的根本约束条件。

全局唯一ID设计要考虑的核心三原则:

业务 ID 解决的是怎么找到某条记录,数据库主键解决的是怎么存好某条记录。别因为它们都叫 ID,就塞进同一个字段!“

自增ID给 InnoDB 用,业务编号(例:订单order_no使用Snowflake ID)给业务用。此方案是业内比较成熟且稳妥的“双ID”设计,在绝大多数业务场景下都能兼顾性能与扩展性。本质上是把“数据库存储主键”和“业务唯一标识”这两个职责解耦,但注意跨库不宜使用。

如果系统本身就在做分库分表,那自增ID在跨库场景下会重复,这时候可能需要直接用雪花ID做主键,或者用号段模式(如美团开源的Leaf方案)来生成严格递增的全局ID。

Read more
Deep Practice of Domain-Driven Design (DDD): Principles of Architecture, Cost Trade-Offs(领域驱动设计(DDD)深度实践:架构原理、成本权衡与实战)

Deep Practice of Domain-Driven Design (DDD): Principles of Architecture, Cost Trade-Offs(领域驱动设计(DDD)深度实践:架构原理、成本权衡与实战)

DDD 定义

领域驱动设计(英文:Domain-Driven Design,缩写 DDD)是一种模型驱动设计的方法,通过领域模型捕捉领域知识,使用领域模型构造更易维护的软件。
最早由埃里克・埃文斯在 2003 年著作《领域驱动设计》提出的软件开发方法论,通过将软件实现与持续进化的领域模型结合来处理复杂业务需求。该方法聚焦核心领域逻辑,强调业务与技术专家协作建立统一语言,利用分层架构分离业务与技术复杂度。

Read more