MySQL分表
MySQL环境中,单表建议容量不超过千万条,否则查询效率会有较大影响。在常规的索引、读写分离、合理sql等方法都用上之后,剩下的方法就是分区分表,分表(sharding)就是水平切割。
mysql5.1版本开始,提供 分区(PARTITION)功能,也是对表数据进行切分你的方法之一。分表是把一张大表拆成N张小表;分区是把一张大表的数据分别存储在若干个区块上,仍然还是一张表。
分表策略一般有几类
范围分区
数字id可以按照数字范围切分,比如上图所示,ID为11000w的,放在第一个节点上;100000012000w的,放在第二节点上,依次类推。这种方法的好处是方便检索,按id查能够快速定位到那个节点,扩容也方便,增加一个节点就好了;不好的地方是数据不均匀,最后一个节点由于数据比较热,访问的频次会非常大。
取模均衡分区
为了解决数据热点问题,可以采用取模的方式,进行切分。一般设置2n个节点,对数字的2n取模。这种方法的好处是起到负载均衡的作用,热点数据会均衡的散落在各个节点中。坏处是扩容比较费劲,不能随意扩容,只能进行双倍扩容,否则需要进行重新sharding。
日期范围分区
如果是日志类的数据,可以按照日期进行切分。
Hash散列分区
非数字的ID进行水平切分,只需要对id进行hash一下,然后对hash值进行2^n取模,就得到分片节点编号了。
总结
表分区基本上就这集中办法,范围分区、取模、hash。核心思想就是把数据均匀的分配到若干区域中,避免造成各种数据热点问题。对应的,在计算时就是数据倾斜问题。