我最近读了一篇关于 Instgram 过去如何分片他们的 ID 的文章,他们使用一个独特的函数在他们的服务器上生成 ID https://instagram-engineering.com/sharding-ids-at-instagram-1cf5a71e5a5c
但这让我很好奇是否可以将一个分片分配给特定用户而不是每个项目,以及它的性能如何。特别是在大型网站中。
因此,类似于以下的功能是否是一种有效的方法。
假设专用数据库上的用户表纯粹供用户使用。
用户-UID-名称-shardId
其中 shardId 是通过一个从 1 开始的函数计算的,对于每个新的插入,它都会递增 - 对于这个例子,最多为 n(比如 2048)。然后重置为 1。几乎充当循环法以在分片之间分发用户数据。
这种功能是否会对性能产生严重影响,尤其是在高负载期间?由于序列列只是从序列中选择一个 nextval,不是吗?这只是一个额外的步骤,一旦达到 n 就重置一个序列。还是我找错了树?
甚至不需要额外的步骤,因为循环是序列的内置功能,请参阅CREATE SEQUENCE。
例子: