单表的数据量非常大时 , 需要考虑分表 , 超过1000万就要考虑了 , 因为此时b+树索引的高度是3-5左右
如果有单字段特别大 , 就要把该字段独立出来 ,这就是垂直分表 , 遵循冷热拆分 , 大小拆分...这里基本在设计的时候就已经考虑好了 , 一般不会出现这种情况
如果是数据量特别大 , 就要结合业务需求和产品特性 , 选择合适的拆分算法
如何切分?...考虑到后续扩展表的数据时,数据迁移会比较难做。
新浪邮箱的用户表是根据默认域邮箱hash取模进行的拆分
b:一致性hash算法
为了保证后续迁移数据影响面较小,建议使用一致性hash算法。...目前查询都是带时间戳的,所以会出现表的访问冷热不均。但同时也避免了跨节点join等问题
新浪邮箱用户的日志表是根据月份加哈希拆分了 1024张表
如何迁移数据?...这是不可避免的问题,可以采用了实时数据双写,历史数据采用脚本导入的方式,在线上数据对齐后,慢慢将流量灌到新的db上。