在数据库中使用UUID+自增长ID混合方式,同时满足系统安全性和查询效率

在数据库中使用UUID+自增长ID混合方式,可以达到较好的安全性和查询效率。具体的实现方式如下:

在数据库表中创建两个字段,一个是 UUID 字段作为全局唯一主键,另一个是自增长的整型字段作为局部有序键。
例如:

sql:

CREATE TABLE `table_name` (
`uuid` CHAR(36) NOT NULL, -- UUID 全局唯一键
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT, -- 自增长局部有序键
... -- 其他字段
PRIMARY KEY (`uuid`),
UNIQUE KEY `idx_id` (`id`)
)


在应用程序端生成 UUID 作为新记录的全局主键。有多种算法可以生成 UUID,比如基于时间戳、随机数、哈希等。
将生成的 UUID 和自增长 ID 一起插入数据库。自增长 ID 可以由数据库自动维护。

uuid = generate_uuid()
insert_record(uuid, null, other_values)
对于需要全局唯一性和数据分片的查询,使用 UUID 作为条件查询。对于需要有序性和分页的查询,使用自增长 ID 作为条件。

sql:

-- 根据 UUID 进行全局唯一查询
SELECT * FROM table_name WHERE uuid = '550e8400-e29b-41d4-a716-446655440000';

-- 根据自增长 ID 进行有序、分页查询
SELECT * FROM table_name ORDER BY id LIMIT 100, 20;


这种混合方式的优点是:

  • 利用 UUID 保证了全局唯一性和数据分布,适合分布式场景
  • 使用自增长 ID 来提高查询效率,符合有序分页的需求
  • 主键设计合理,同时考虑了安全性和查询性能

需要注意的是:

  • 生成 UUID 会有一定的性能开销,但相对数据库的读写开销来说可以接受
  • 自增长 ID 只保证单个节点内的有序性,多节点部署时需要分库分表
  • 主键总长度会比单一使用 UUID 或自增长 ID 更长,会稍微增加索引存储


通过这种方式,可以根据不同的业务场景来使用合适的键,较好地平衡了安全性、唯一性、有序性和查询效率。

posted @ 2024-03-11 18:26  hjjsunli  阅读(19)  评论(0编辑  收藏  举报