MongoDB测试

MongoDB常见部署架构

  • 单机版:开发与测试
  • 复制集:高可用
  • 分片集群:横向扩展

为什么要使用分片集群?

  • 数据容量日益增大,访问性能日渐降低,怎么破?
  • 新品上线异常火爆,如何支撑更多的并发用户?
  • 单库已有10TB数据,恢复需要1-2天,如何加速?
  • 地理分布数据

分片如何解决?下面用一个例子来讲解:

情况如下:

  • 银行交易单表内10亿笔资料,超负荷运转
  • 交易号0- 1,000,000,000

解决方法1

  • 把数据分成两半,放到两个库物理里。

    • 交易号 :0 - 500,000,000
    • 交易号 :500,000,000 - 1,000,000,000

解决方法2

  • 把数据分成四部分,放到四个物理库里。

    • 交易号:0 - 250,000,000
    • 交易号:250,000,000 - 500,000,000
    • 交易号:500,000,000 - 750,000,000
    • 交易号:750,000,000 - 1,000,000,000

分片集群解剖:路由节点mongos

graph TD
A[Application] --> B(Driver)
    B --> C{mongos
123} C --> |Shared1/config1| Z[复制集1] B --> D{mongos} D --> |Shared2/config2| Y[复制集2] B --> E{mongos} E --> |Shared3/config3| X[复制集3]
路由节点
  • 提供集群单一入口
  • 转发应用端请求
  • 选择合适数据节点进行读写
  • 合并多个数据节点的返回
  • 无状态
  • mongos 建议至少2个
配置(目录)节点
  • 提供集群元数据存储
  • 分片数据分布的映射
  • 普通复制集架构
数据节点
  • 以复制集为单位横向扩展
  • 最大1024分片
  • 分片之间数据不重复
  • 所有分片在一起才可完整工作

MongoDB分片集群特点

  • 应用全透明,无特殊处理
  • 数据自动均衡
  • 动态扩容,无须下线
  • 提供三种分片方式

MongoDB分片集群特点

  • 应用全透明,无特殊处理
  • 数据自动均衡
  • 动态扩容,无须下线
  • 提供三种分片方式

分片集群数据分布方式

  • 基于范围
  • 基于Hash
  • 基于zone/tag

分片集群数据分布方式-基于范围(最常用)

Pros Cons
片键范围查询性能好 数据分布可能不均匀
优化读 容易有热点

分片集群数据分布方式-基于哈希

Pros Cons
数据分布均匀,写优化 范围查询效率低
  • 适用:日志,物联网等高并发场景

分片集群数据分布方式-自定义Zone

小结

  • 分片集群可以有效解决性能瓶颈及系统扩容问题
  • 分片额外消耗较多,管理复杂,尽量不要分片
  • 如果实在要用,请仔细学习下一讲

你可能感兴趣的:(mongodb,nosql,linux)