跨数据库网络的MySQL UID系统

时间:2016-11-01 14:04:54

标签: mysql hash uid

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

我最初的想法是使用员工电话号码创建哈希(例如SHA-1)。 这样,碰撞的可能性极低,价值也是独一无二的。

但是我知道,由于每个UID的大小,缺少排序结构和数据类型(VARCHAR),如此长的UID将花费额外的资源来执行UID上的查询(如SELECT)。

有没有人对如何解决这个问题有任何想法?

1 个答案:

答案 0 :(得分:1)

来自生日的

sha1是一个坏主意,人们生日相同,无论哈希算法本身是否存在潜在的冲突,都可以发生冲突。输入范围有限(生日)。

有几种选择:

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

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

  • 你可以使用UUID,它看起来很昂贵,但是如果没有数据集大小和运行的硬件,现在就假设它还为时过早。 UUID迅速解决了您的问题。您可以轻松地将UUID存储到binary(16)列中,从而为您提供固定的宽度和较小的空间占用空间(例如:select unhex(replace(uuid(), '-', ''))