Python- 基于 UUID 的分片

Python- Sharding based on UUID

我正在处理数据库分片,我必须在 Python 代码(应用程序分片)中决定数据库桶。我有 3 个不同的数据库桶和使用的用户 ID,我必须对其进行分片。用户 id 由 uuid.uuid4() 生成。我如何使用这些输入进行分片? 我尝试先将 UUID 转换为 int,然后取模。但是模数运算符失败了。

模运算符应该没问题:

>>> int(uuid.uuid4()) % 3
2L
>>> int(uuid.uuid4()) % 3
1L
>>> int(uuid.uuid4()) % 3
2L
>>> int(uuid.uuid4()) % 3
1L
>>> int(uuid.uuid4()) % 3
1L
>>> int(uuid.uuid4()) % 3
0L
>>> int(uuid.uuid4()) % 3
1L

但是为了让您的设计面向未来,我建议您实际编写至少 16 个分片,例如使用 16 个不同的主机名指向 3 个不同的后端主机:

myhostname00 IN CNAME backend01
myhostname01 IN CNAME backend01
myhostname02 IN CNAME backend01
myhostname03 IN CNAME backend01
myhostname04 IN CNAME backend01
myhostname05 IN CNAME backend01
myhostname06 IN CNAME backend02
myhostname07 IN CNAME backend02
myhostname08 IN CNAME backend02
myhostname09 IN CNAME backend02
myhostname10 IN CNAME backend02
myhostname11 IN CNAME backend03
myhostname12 IN CNAME backend03
myhostname13 IN CNAME backend03
myhostname14 IN CNAME backend03
myhostname15 IN CNAME backend03

这样您以后就可以创建更多后端服务器并将用户转移到那里而无需更改您的代码。如果您的后端服务器性能比其他服务器低,您甚至可能拥有分布不均的用户。