禅Hugozen思考 · THOUGHTS

Sharding of mongodb

2016-09-06 技术笔记

blog 教程

分片概念

集合可以被分片,一个片可以包含多个区间,一个区间可以包含多个块,一个块可以定大小。所有这些概念都是逻辑上的,真实的物理存储并不存在这样的一一对应关系。如下图:

分片1----
          |
          |
      +++++++++++
      +  |------ 块1   +     区间1
      +  |------ 块2   +
      +++++++++++
          |
          |
      +++++++++++
      +  |------ 块3   +     区间2
      +  |------ 块4   +
      +++++++++++
          |
          |
      +++++++++++
      +  |------ 块5   +     区间3
      +  |------ 块6   +
      +++++++++++
     逻辑概念与物理概念上并不一致

片键选择问题

Geo location

建立索引

源码阅读进度

  • 看了下整个架构
  • 基于 c++ 的一个项目,采用的库有 boost……
  • 多线程模型,通过锁机制来完成任务的调度
  • 事件循环采用最传统 select 机制
  • 每个客户端一个 threading,更优化的可能地方在内部的连接线程池,可以加快响应速度
  • [参考][http://blog.csdn.net/daizhj/article/category/803114]

经验记录

  • 传统的 master、slave 模式已经被弃用,mongo 推荐采用副本集,即 replica set。
  • 它的使用规则还是非常的简易。
  • 主从可以互相切换,当然也支持不切换的。
  • 第三方调用默认读写都走主,但可以调配副本提供读。这样就能有效分流读写的压力。
  • 副本集的提出主要是为了数据备份。
  • mongos 的提出是为了 sharding 的,它也是 mongodb 里面的节点类型之一。(PS:mongodb 有许多节点类型,单个数据库实例算一种,提供查询的 config 也是一种等等)
  • sharding 是为了把大量的数据从单台机分离出来,切分数据到不同的机子上去。避免内存被撑爆了。
  • 未完待续
← Spider relatedReading note of the totor library for python →