UUID 和整数值的组合作为 MySQL 中一个数据库中的主键

Combination of UUID and integer value as primary key in one database in MySQL

你能给我一些建议吗,如果将 UUID 混合作为 主键 和自动递增 会很好同一数据库中不同表的整数 值?我们希望重建数据库,该数据库会及时变大并在分布式环境中运行。将有一个主数据库和其他机器上的许多较小的数据库(主数据库的子集)。最小的数据库将与主数据库同步。

我知道在这样的分布式系统中UUID将是主键的最佳选择。但是例如在数据库中会有像 page_status 或 page_type 这样的表,它们不会经常更改并且不需要很多行。因此,为了性能和可读性,在此类表中仅将整数值作为主键会更简单。请让我知道您的想法以及您在这个主题上的经历。提前致谢!

UUID 是 'right' 在需要时创建唯一 ID 的方法:

  • id需要不同客户端独立构建

UUID 有这些问题:

  • 体积庞大:每次使用 16 个字节。请注意,“使用”包括所有辅助键,并加入 tables。它加起来。
  • 随机性:当 table 大于 RAM 时,对磁盘速度的引用会减慢。

备选方案是

  • 有一个来源(例如,数据库)在被询问时提供 'next' id。这限制了生成 ID 的速度。

  • 设计一种让客户端独立生成唯一 ID 的机制,但不是基于 UUID——参见上面的问题。示例:一个 64 位整数,时间在最前面,然后是唯一性编号(在客户端内),然后是客户端编号。

  • 可以将 UUID 映射到较小的 AI,然后在不同的地方使用。但这增加了复杂性。

  • 玩弄 Type-1 UUID 的位使得大致按时间顺序排列;这避免了随机性。在 http://mysql.rjweb.org/doc.php/uuid 中讨论。 MySQL 8.0.

    内置的功能