一、Sharding(分片)
Sharding 是把数据库横向扩展(Scale Out)到多个物理节点上的一种有效的方式,其主要目的是为突破单节点数据库服务器的 I/O 能力限制,解决数据库扩展性问题。Shard这个词的意思是“碎片”。如果将一个数据库当作一块大玻璃,将这块玻璃打碎,那么每一小块都称为数据库的碎片(DatabaseShard)。将整个数据库打碎的过程就叫做sharding,可以翻译为分片。
形式上,Sharding可以简单定义为将大数据库分布到多个物理节点上的一个分区方案。每一个分区包含数据库的某一部分,称为一个shard,分区方式可以是任意的,并不局限于传统的水平分区和垂直分区。一个shard可以包含多个表的内容甚至可以包含多个数据库实例中的内容。每个shard被放置在一个数据库服务器上。一个数据库服务器可以处理一个或多个shard的数据。系统中需要有服务器进行查询路由转发,负责将查询转发到包含该查询所访问数据的shard或shards节点上去执行。
二、Scale Out/Scale Up 和 垂直切分/水平拆分
Mysql的扩展方案包括Scale Out和Scale Up两种。Scale Out(横向扩展)是指Application可在水平方向扩展。添加更多的机器资源来提升自己的效率从而达到很好的扩展性。
Scale Up(纵向扩展)是指Application可以在垂直方向扩展。对单台机器而言,(提升单机硬件)Scale Up是当某个计算节点(机器)添加更多的CPU Cores,存储设备,使用更大的内存时,应用可以很充分的利用这些资源来提升自己的效率从而达到很好的扩展性。
MySql的Sharding策略包括垂直切分和水平切分两种。垂直(纵向)拆分:按功能模块拆分,解决表与表之间的io竞争。如分为订单库、商品库、用户库...多个数据库之间的表结构不同