【问题标题】:MySQL UID system across a database network跨数据库网络的 MySQL UID 系统
【发布时间】:2016-11-01 22:20:03
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您是否尝试过使用 uuid() 函数的前插入 trigger
  • 您有多个员工表或无法复制/复制到其他数据库的主表的结构是什么?
  • 您的问题不清楚。您的员工是否将在所有数据库中定义,或者例如,每个部门都有自己的数据库和自己的员工?

标签: mysql hash uid


【解决方案1】:

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

有几种选择:

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

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

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

【讨论】:

    猜你喜欢
    • 2013-06-24
    • 1970-01-01
    • 1970-01-01
    • 2018-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    相关资源
    最近更新 更多