在程序使用中,我们会发现有些业务表数据量越来越大,查询效率越来越低,已经到了必须考虑分表的时候。那么如何分表呢?以下是个人心得:
方案一、按照时间分表
按照时间分表很好理解,比如按照天、周、月、年作为分表依据;优点是分表规则简单,缺点是数据查询条件必须带上时间参数。
方案二、按照userId分表
web项目中,一般请求都能获取token或session,间接可以获取身份id(userId)。然后根据userId值设置自己的规则生成表,再建一个userId(主键)和tableName关联的数据表。新产生的业务数据就存入对应的表,同时把以前的业务表数据迁移过来。查询业务数据时先根据当前身份查找对应的tableName,然后再查询对应表数据。
如何根据userId值设置规则生成表,先附图:
如果userId是整形,可取最后一位数或最后两位数来分表,分表个数分别对应10个和100个,这里需要根据实际情况选择。
如果userId是UUID字符串,先定义一个全局数组[0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f],一共10+6=16个元素。①若取最后一个字符分表,可以分16个表;②若取最后两位或首尾两位分表,可分16*16=256个表,或者两个字符对应的数组索引相加,可分30个表。userId规则分表的优点是不管后期规则是否变动,只要有身份和表名关联都不影响。缺点是查询所有人最近的业务数据比较麻烦,可以考虑建一个表,只存最近所有人的信息,并定期删除很久以前的数据。
方案三、按照用户组织分表
按照公司、部门、小组等信息分表,前提是确定个人所属组织不会发生改变。优点和缺点和方案二基本相同。
(所有思路仅供参考)
网友评论