我有很多用户,需要将数据库分片为n个碎片。因此,我有以下选项来继续进行操作:
- 按照userId模数n的操作将我的数据划分为n个碎片。例如,如果我有10个碎片,userId 1999将被发送到第9个碎片,即1999%10=9。
问题: 这种方法的问题在于,如果未来引用的碎片数量增加,则无法保持对先前的引用。 - 我可以维护一个包含UserId和ShardId的表
问题: 如果我的用户在将来增加到数十亿,我将需要共享该映射表,这似乎不是一个好的解决方案。 - 我可以在代码中维护静态映射,例如Shard 1中的0-10000个用户等等。
问题:- 随着碎片和用户数量的增加,需要更频繁地更改代码。
- 如果某个特定的碎片中存在大量数据的特定用户,则难以分离出该碎片。
因此,这些都是我找到的三种方法,但都存在一些问题。有没有另一种或更好的方法来分片MySQL表,可以弥补未来增加的碎片和用户数量。