我们目前正在使用自动生成的主键,我们希望切换到一种更适合基于微服务的应用程序的方法:我们将使用业务定义的主键(个人税码)或全局唯一标识符。
- 过去,MySQL 在使用字母数字主键而不是自动增量时会出现性能问题,现在仍然如此吗?
- 如果我们采用 UUID 方法,是否有可能使用强大的 uuid 生成器来保证 uuid 即使在不同的服务器上也是唯一的?
最佳答案
可以更改自动增量的增量步长和偏移量,以确保在 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 为步长并且会更快溢出。
关于MYSQL微服务架构之主键策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40840470/