MongoDB使用心得

来源:互联网 发布:coredata 更新数据 编辑:程序博客网 时间:2024/06/11 12:57

在使用MongoDB过程中从片键的选择、分片配置等方面总结了以下一些经验。


片键的选择

  •  如果在某集合中一个键有N个值,那就只能有N个数据块,因此只能有N个分片。所以避免使用单一的小基数片键,如果要使用小基数片键,务必使用组合片键。
  • 如果一个集合有生命周期,使用该生命周期作为片键。
  • 不要使用升序键,这会使所有新插入的数据都插入到最后一个分片上。
  • 每个键上都有索引,而索引数量的增加会使写操作变慢。
  • 一般性的好的片键的片键公式:{coarseLocality:1,search:1};前者控制数据局部化,后者为常用索引字段

个人理解的热点:单一且不可分散的进行频繁读写操作的分片

 

总结:实际过程中要想选择出一个好的片键,需要充分了解数据特征,再结合以上几点原则。

 

配置服务器

  • 通常运行1个或3个配置服务器(1:测试环境;3:生产环境)
  • mongos–configdb configsvr1, configsvr2, configsvr3

 

分片

  • 添加分片时用addshard的maxSize选项处理服务器容量失衡
  • 在还有足够调度空间的时候就开始添加分片;在非忙时段(服务器负载量较小的时段)添加分片,减少服务器负担
  • 新添加的分片可以非空,我们可以把多个系统交叉使用集中起来攒成一个大的分片集群(一个集群使用的是foo数据库,另一个集群使用bar数据库,他们可以运行在同一集群上)
  • 如果想修改集群中某个副本集中的服务器,可绕开mongos,直接连接该服务器来修改服务器配置

 

管理

  • connectto configserver,use config,查看config数据库,里面记载了所有集群配置信息。
  • 注意查看config.changelog内容
  • Mongostat-最全面的监控工具,能返回大量与服务器运行有关的信息。可用参数:qr|qw,ar|aw
  • http://localhost:port/_replSet,web管理界面

 

查询优化

  • 当返回结果为总体数据的一小部分的时候,使用索引会有很明显的优化效果,否则有可能会适得其反
  • 索引覆盖查询
  •  组合索引加快多个查询
  • 索引会增加很多额外的写入,因此在插入大量数据时会严重影响插入速度,此问题暂时还没有找到好的解决办法。
  • And型查询:将查询条件更苛刻的项放在前面,可大量减少需要查看的文档数。
  • Or型:与And型相反,将匹配最多的放在最前面

 

查询只返回某一字段

 

例:查询avIrd为138的文档,只返回fId,其他字段不返回

 

db.type2.find({avIrd:138},{"_id":0,fId:1})

 

注:_id默认返回,所以要显示定义其不返回

 

0 0