分区
分区是一种将大型数据库分解成小型数据库的方式,主要的目的是增加系统伸缩性 Scalability。
键值数据分区
- 根据键的范围分区(利于范围查询)
- 根据目录分片(利于点查询)
- 根据地理位置分片(CDN)
- 根据键的散列分区(利于负载均衡)
无论哪种分区,都无法完全避免某些数据热点问题,需要应用端来处理它们。
分区与次级索引
- 基于文档的次级索引进行分区
- 基于关键词的次级索引进行分区
分区在平衡
要求
- 再平衡后,负载应保持平衡
- 再平衡时,数据继续读取和写入
- 在平衡中,只移动必要的数据,减少网络和磁盘 I/O 负载
再平衡策略
- hash mod N
- 固定数量的分区
- 动态分区(固定大小分区)
- 按节点比例分区
请求路由
- 在节点上
- 在路由层
- 在客户端
服务发现 (Zookeeper) 注册与订阅。