Sharding of mongodb
blog 教程
- Mongodb 集群配置 (sharding with replica set)
- MongoDB 副本集学习
- Mongodb 分片实践
- mongoDB 选择一个合适的片键,官方的 slideshare, 还不错
- mongodb 的內部實現
- MongoDB 的内部构造 From MongoDB The Definitive Guide
- mongodb nosqlfans 的索引
- mongo 分布式图文教程,整个 blog 系列的文章都很不错
- 为什么你不应该使用 MongoDB
分片概念
集合可以被分片,一个片可以包含多个区间,一个区间可以包含多个块,一个块可以定大小。所有这些概念都是逻辑上的,真实的物理存储并不存在这样的一一对应关系。如下图:
分片1----
|
|
+++++++++++
+ |------ 块1 + 区间1
+ |------ 块2 +
+++++++++++
|
|
+++++++++++
+ |------ 块3 + 区间2
+ |------ 块4 +
+++++++++++
|
|
+++++++++++
+ |------ 块5 + 区间3
+ |------ 块6 +
+++++++++++
逻辑概念与物理概念上并不一致
片键选择问题
- 分布式中,容易出现数据重复,即除了片键以外,很难保证唯一性.
- <深入学习 mongodb> 中给了个推论,” 除非在_id” 上分片,否则能够创建出不唯一的_id 值.
- [演讲][http://www.mongodb.com/presentations/sharding-overview]
- [演讲二][http://www.mongodb.com/presentations/sharding-best-practices-advanced-session]
Geo location
建立索引
- [索引的建立,好坏,场景][http://www.itokit.com/2011/1207/72718.html]
源码阅读进度
- 看了下整个架构
- 基于 c++ 的一个项目,采用的库有 boost……
- 多线程模型,通过锁机制来完成任务的调度
- 事件循环采用最传统 select 机制
- 每个客户端一个 threading,更优化的可能地方在内部的连接线程池,可以加快响应速度
- [参考][http://blog.csdn.net/daizhj/article/category/803114]
经验记录
- 传统的 master、slave 模式已经被弃用,mongo 推荐采用副本集,即 replica set。
- 它的使用规则还是非常的简易。
- 主从可以互相切换,当然也支持不切换的。
- 第三方调用默认读写都走主,但可以调配副本提供读。这样就能有效分流读写的压力。
- 副本集的提出主要是为了数据备份。
- mongos 的提出是为了 sharding 的,它也是 mongodb 里面的节点类型之一。(PS:mongodb 有许多节点类型,单个数据库实例算一种,提供查询的 config 也是一种等等)
- sharding 是为了把大量的数据从单台机分离出来,切分数据到不同的机子上去。避免内存被撑爆了。
- 未完待续