思考题:分布式架构的一个最大特点是可以动态伸缩,可以随着需求变化,动态增加或者减少服务器。对于支持分片的分布式关系数据库而言,比如我们使用 MYCAT 进行数据分片,那么随着数据量逐渐增大,如何增加服务器以存储更多的数据呢?如果增加一台服务器,如何调整数据库分片,使部分数据迁移到新的服务器上?如何保证整个迁移过程快速、安全?
1、创建远超实际节点数的分区,每个节点分配多个分区。当集群增加新节点时,该新节点从现有的节点中匀走几个分区,直到达到全局平衡。请求到来时、由于分区总数不变,所以不会改变关键词到分区的映射关系,唯一调整的是分区与节点的对应关系。这种策略目前在 ElasticSearch 等系统使用
2、动态分区策略。当分区数据增长超过阈值(如 Hbase 为 10G),那么拆分为两个分区,每个承担一半的数据量,数据转移到其他节点。如 Hbase 借助了 HDFS 实现分区文件的传输
3、分区数与节点数成正比。当加入新的节点时,分区数增加。如 Cassandra 采用了这样的方式