我正在进行数据库分片,我必须在Python代码(应用程序分片)中决定数据库存储区。我有3个不同的数据库存储区和使用用户ID,我必须对其进行分片。用户标识由uuid.uuid4()生成。如何使用这些输入进行分片? 我尝试将第一个UUID转换为int然后取模数。但模数运算符失败了。
答案 0 :(得分:1)
模数运算符应该没问题:
>>> 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
通过这种方式,您将来可以创建更多后端服务器,并在不更改代码的情况下将用户移动到那里。如果您的后端服务器性能比其他服务器效率低,那么您甚至可能会有不均匀分布的用户。