1

我的数据将分布在 50 个具有相同架构的数据库中,假设只有一个表 ORDER(50 个客户端每个数据库一个数据库),但每条记录必须是全局可识别的。我计划使用数字 UID 作为 PK。

我的理解是mySQL会为这个PK创建一个聚集索引。

数据将始终以单调递增的 UID 顺序插入。

关于查询性能的问题:在决定如何生成uid时,我有两种选择。哪个对查询性能更好(在给定的数据库中),还是没关系?

1)对于每个客户端/数据库,我分配一个固定的硬编码“范围”,这对于那里的所有未来记录绝对足够:我选择了一个非常大的数字范围,范围为 10^15,在一个范围内我开始递增一这样这个特定数据库的所有 UID 值都会很大,但它们之间不会有“漏洞”

2)我对所有数据库中的记录使用全局共享的 HiLo 生成器,这意味着对于给定的数据库,那里的记录将具有较小的值(与 #1 中的 10^15 比例相比),但顺序之间会有更多的“漏洞” UID 记录(或者更确切地说,在UID批次之间:即,如果批次大小为 100,则会有 UID:100,101,102,...199,然后是 1400,1401,1402..1499,然后可能是 16000,16001,.. 16099)

4

1 回答 1

0

最简单的解决方案是向所有表添加一instance_id列,为每个数据库预先确定,并使用标准的 auto_increment 机制。记录的实际唯一 id 将是 tuple (instance_id, autinc_val)

于 2013-06-24T18:46:06.180 回答