首页 > 解决方案 > Python - 基于 UUID 的分片

问题描述

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

标签: pythonpython-2.7uuidsharding

解决方案


模运算符应该没问题:

>>> 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

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


推荐阅读