设为首页 收藏本站
查看: 801|回复: 0

[经验分享] mongodb sharding 原理学习与试用(三)

[复制链接]

尚未签到

发表于 2015-7-10 10:30:10 | 显示全部楼层 |阅读模式
  1. 什么时候启用分片?
  答: 虽然分片很强大,但是它也需要更多的硬件以及更加复杂的配置。对于采用分片的思路应该是宁可不用也不乱用。但是也要提前做好准备,不要到了快撑不住的时候才开始考虑,因为那个时候能给你思考的时间并不多。如果应用到最后仍是要采用分片的话,那在最开始就要考虑清楚到底是哪些集合会采用分片。以及设计好片键。
  当满足如下三个条件其中一个,也可以考虑采用分片:
  (一) 数据集大小接近单个节点的存储容量。
  (二) 活跃数据量接近节点最大内存容量。
  (三) 节点的写请求速度无法满足要求。(读请求速度无法满足要求的时候可以通过读写分离的方式或者replicSet模式)  
  2. 标准配置:
  3个配置服务实例,每一个片都是一个replicSets,至少一个路由实例。路由实例不占资源可以跟存储数据节点布署在同一台机器。
  3. 数据分片存储时默认块大小64MB。
  4. 什么时候才会迁移数据(只考虑数据量这一方面)
  答:(一)在2.2版本之前,当最大数据量的节点的块数量比最小数据量的节点的块数据相差值达到8块,就会发生迁移。
  (二)在2.2版本之后,引入了迁移阀值。迁移阀值也是用来形容不同节点之间数据块的差值,只不过它会随着节点的数据块大小的增加而增加。
  当节点的数据块不超过20块时(所有节点的数据块之和),迁移阀值为2。即最大数量的数据块与最小数量的数据块的差值达到2块时就发生数据迁移 。
  当节点的数据块在20-80块之间,迁移阀值为4。同理。
  当节点的数据块超过80块,迁移阀值为8。同理。
  (三)当开始迁移数据后,直到任何两个节点之间的数据块的差值不超过2才停止。
  5. 片键
  (一)片键是集合的列。且必须每条记录都存在这一列。不然一条不存在片键列的记录无法分配。
  (二)片键可以是单列,也可以是多列。
  (三)数据的分布是基于片键的范围规化。试想一下,如果以一个timestamp列为片键,那么对于插入而言,总是操作于最后一个数据节点。
  (四)片键一旦选择后是不可更改的。如果没有指定片键,系统默认使用ObjectID做片键。
  6. 如何选择片键  
  (一)片键要有利于分块。每个块的片键范围必须是不同的。试想一下,如果片键的可能值很少只有几个。那么能分成的块至多就跟片键的可能值个数一样。这样一来,一个块的数据量超过默认块大小64MB后,无法分块。这样就影响读的速度。
  (二)片键要有利于分散写请求。不能因为片键的分布让写操作只操作于某一个节点。试想一下,如果以ObjectID为片键,ObjectID是按时间递增的,所以最新插入的数据的ObjectID肯定是最大的,也因此都会分配到同一个节点中。这时插入操作都操作于某一个节点。这个节点就有可能成为瓶颈。如果大部分写操作是update,那么性能影响要少一些。
  (三)分键要有利于查询数据。如果查询条件中有片键这个条件,那么路由就可以根据片键条件将查询直接转发到符合片键分布的节点然后再进行数据查询。试想一下,如果查询条件中不包含片键条件,那么路由就必须将请求转发到所有的节点进行数据查询。                                                                                                                                
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-85141-1-1.html 上篇帖子: MongoDB学习笔记——初体验 下篇帖子: Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase vs Membase vs Neo4j co
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表