步骤
a. 分析业务场景
该表的使用者为签到用户和运营人员。
签到用户进行签到时在表中记录的相关信息:uid、时间、ip等。签到用户侧对数据库使用的基本特点是:单条记录写入,访问量大,服务要求高可用。
运营人员在前端通过uid查询用户的签到信息,业务场景如:用户投诉某天的签到没有统计。运营人员侧需求的基本特点是:大量的批量分页查询需求,或许需要增加多种查询方式。
c. 方案设计:
采用水平分表的方式,按照时间或uid进行分表。
按照时间:比如半年
优势:1.扩容简单,只需按照时间增加表即可;2. 查询的数据为近期数据,只需在一个表中按照近期时间查询即可;3.切分策略简单;4.需要修改部分写入和查询的代码:写入操作需要按照时间更新,查询操作需要根据查询数据量进行多表查询。
劣势:1.请求量不均,总是在新表写入数据;2.当需要查询用户所有签到数据时需要访问所有表;3.数据量不均,新增的表数据量会非常少。
按照uid:
哈希法
优势:1. 数据量均衡;2.请求量均衡。
劣势:1.扩容麻烦,若增加新表则需重新哈希,可能会导致数据迁移;2. 写入操作需要更新按照uid哈希结果进行写入,查询操作需要按照uid哈希结果进行查询。若增加新表则需修改代码。
范围法
优势:1.策略简单;2.扩容简单。
劣势:1.数据量不均;2.
d. 执行方案
原文:https://www.cnblogs.com/tf-Y/p/9408536.html