微服务架构的MYSQL主键策略

时间:2016-11-28 09:02:37

标签: mysql microservices

我们目前正在使用自动生成的主键,我们希望切换到更适合基于微服务的应用程序的方法:要么我们要使用业务定义的主键(人员税码),要么全局使用唯一标识符。

  • 过去,使用字母数字主键而不是自动增量时MySQL存在性能问题,是不是仍然如此?
  • 如果我们采用UUID方法,是否有可能使用强大的uuid生成器来保证即使在不同的服务器上uuid也是唯一的?

2 个答案:

答案 0 :(得分:2)

可以改变增量步长&自动增量的偏移量,以确保MySQL主机云的唯一性。所有实例都可以具有相同的增量大小,但是不同的初始偏移量将确保没有主键冲突。

这种方法还有一个小优势,您可以立即从数据行中的主列中分辨出哪个数据库实例创建了它。

在my.cnf中,添加:

auto-increment-increment = 100
auto-increment-offset = N

其中N介于0到99之间,并且每个数据库实例都是唯一的。如果您计划多于或少于100个数据库实例,那么您也可以更改'auto-increment-increment'的值。

使用此配置,N = 1的实例将生成

的自动增量值
1,101,201,301,401,501... and so on

N = 2将生成

2,102,202,302,402,502... and so on

同时确保主键列大小也考虑到增量现在将以100为步长并且将更快溢出。

答案 1 :(得分:0)

使用guid是我准备好的方法,guid将由创建者而不是数据库生成,而且,我不建议在分布式系统中使用参照完整性来保留事务数据,因为这会降低能力扩展您的组件。

鉴于最终的一致性和代码分配到单独的流程,您的事务数据对外部世界没有任何有意义的状态,一旦有意义的业务状态处于有意义的状态,就应该将其写入视图模型数据存储(完成创建用户,完成验证用户等等。)

有意义吗?