我们目前正在使用自动生成的主键,我们希望切换到更适合基于微服务的应用程序的方法:要么我们要使用业务定义的主键(人员税码),要么全局使用唯一标识符。
答案 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将由创建者而不是数据库生成,而且,我不建议在分布式系统中使用参照完整性来保留事务数据,因为这会降低能力扩展您的组件。
鉴于最终的一致性和代码分配到单独的流程,您的事务数据对外部世界没有任何有意义的状态,一旦有意义的业务状态处于有意义的状态,就应该将其写入视图模型数据存储(完成创建用户,完成验证用户等等。)
有意义吗?