MySQL 跨数据库网络的 UID 系统

MySQL UID system across a database network

我想在我的数据库中为我的员工创建唯一标识符,这是为了避免跨数据库重复,即如果员工 Barbra 存储在 DB1 中,我不希望在 DB2 中再次创建她。

我最初的想法是使用从员工电话号码创建的散列(例如 SHA-1)。 这样碰撞的可能性极低,并且值将是唯一的。

但是我知道拥有这么长的 UID 将花费额外的资源来执行查询,例如 SELECT,由于每个 UID 的大小,缺乏排序的结构和数据类型(VARCHAR ).

有没有人知道如何解决这个问题?

sha1 从生日开始是个坏主意,人们有相同的生日,无论哈希算法本身是否存在潜在冲突,您都可能会发生冲突。 运行ge 的输入是有限的(生日)。

有几种选择:

  • 每个数据库都可以实现auto_increment_offset

  • 每个数据库都可以实现由 (id, db_id) 组成的复合主键,其中 db_id 是数据库位置的数字唯一标识符。

  • 你可以使用 UUID,这似乎很昂贵,但如果没有 运行 的数据集大小和硬件,现在就假设任何事情还为时过早。 UUID 快速解决您的问题。您可以轻松地将 UUID 存储到 binary(16) 列中,从而为您提供固定宽度和低 space 占用空间(示例:select unhex(replace(uuid(), '-', '')).