分片概念
分片(SHarding)就是用来确定数据在多台存储设备上分布的技术。Shard这个词的意思是“碎片”,如果将一个数据库当做一块大玻璃,将这块玻璃打碎,那么没一小块都成为数据库的碎片(Database Sharding)。将一个数据库打碎成多个的过程就叫做分片,分片是属于横向扩容方案。
数据库扩展方案:
横向扩展:一个库变成多个库,加机器数量
纵向扩展:一个库还是一个库,优化及其性能,加高配CPU或内存
在分布式存储系统中,数据需要分散存储在多台设备上,分片就是把数据库横向扩展到多个数据库服务器上的一种有效方式,器主要作用就是为了突破单节点数据库服务器的IO能力限制,常用规则有以下几种。
基于范围的分片
根据特定字段的范围进行拆分,比如用户ID、订单时间、产品价格等。
优点:新的数据可以落在新的存储节点上,如果数据库扩容,数据无需迁移。
缺点:数据热点分布不均匀,数据冷热不均匀,导致节点符合不均。
哈希取模分片
整形的Key可直接对设备数量取模,其他类型的字段可以进先计算Key的哈细致,然后再对设备数量取模。假设有n台设备,编号为0-n-1,通过Hash(Key)%n就可以确定数据所在的设备编号。该模式也成为离散分片。
有点:实现简单,数据分配比较均匀,不容易出现冷热不均,负荷不均的情况。
缺点:扩容时会产生大量的数据迁移,比如从n台设备扩容到n+1,绝大部分数据需要重新分配和迁移。