MongoDB线上实践指南-基础篇之支撑百亿级访问(四)
来源:互联网 发布:施耐庵子孙 哑巴 知乎 编辑:程序博客网 时间:2024/06/08 12:59
MongoDB操作性能
1索引中的-1和1是不一样的,一个是逆序,一个是正序,应当根据自己的业务场景建立适合的索引排序,需要注意的是{a:1,b:-1} 和 {a:-1,b:1}是一样的
2在开发业务的时候尽量检查自己的程序性能,可以使用 explain() 函数检查你的查询执行详情,另外 hint() 函数相当于 MySQL 中的 force index()
3查询中的某些
- $exist:因为松散的文档结构导致查询必须遍历每一个文档
- $ne:如果当取反的值为大多数,则会扫描整个索引
- $not:可能会导致查询优化器不知道应当使用哪个索引,所以会经常退化为全表扫描
- $nin:全表扫描
or:有多少个条件就会查询多少次,最后合并结果集,所以尽可能的使用 in
4如果你的结合体积/文档数固定,那么建议创建 capped(封顶)集合,这种集合的写入性能非常高并无需专门清理老旧数据,需要注意的是 capped 表不支持r emove() 和 update()
5在写入数据的时候,如果你需要实现类似 MySQL 中 INSERT INTO ON DUPLICATE KEY UPDATE 的功能,那么可以选择 upsert() 函数
6不要一次取出太多的数据进行排序,MongoDB 目前支持对32MB以内的结果集进行排序,如果需要排序,那么请尽量限制结果集中的数据量
7MongoDB 的聚合框架非常好用,能够通过简单的语法实现复杂的统计查询,并且性能也不错
8如果需要清理掉一个集合中的所有数据,那么 remove() 的性能是非常低下的,该场景下应当使用 drop()
remove() 是逐行操作,所以在删除大量数据的时候性能很差
9写入大量数据的时候可以选择使用 batchInsert,但目前 MongoDB 每一次能够接受的最大消息长度为48MB,如果超出48MB,将会被自动拆分为多个48MB的消息
10在使用数组字段做为查询条件的时候,将于覆盖索引无缘
这是因为数组是保存在索引中的,即便将数组字段从需要返回的字段中剔除,这样的索引仍然无法覆盖查询
11在查询中如果有范围条件,那么尽量和定值条件放在一起进行过滤,并在创建索引的时候将定值查询字段放在范围查询字段前
- MongoDB线上实践指南-基础篇之支撑百亿级访问(四)
- MongoDB线上实践指南-基础篇之支撑百亿级访问(二)
- MongoDB 线上实践指南-基础篇之支撑百亿级访问(三)
- MongoDB线上实践指南-基础篇(一)
- MongoDB线上实践指南-基础篇之命名规范(一)
- 百亿级通用推荐系统实践
- 百亿级通用推荐系统实践
- mongodb指南(四) - developer zone - 教程
- mongodb指南(九) - developer zone - 数据库之命令(四)
- mongodb权威指南-基础
- mongodb 数据库基础实践
- MongoDB(四)mongodb设置用户访问权限
- 软件工程线上课程(C语言实践篇)学习心得总结
- 软件工程线上课程(C语言实践篇)学习心得总结
- MongoDB在58同城百亿量级数据下的应用实践
- 学习MongoDB 十二: MongoDB聚合(Aggregation Pipeline基础篇-下)(四)
- 线上内存溢出问题排查<实践篇>
- YOUYOU部署MongoDB系列之四(测试MongoDB性能)
- Optical Flow学习心得
- Deep Learning学习 - VGG-Face网络人脸识别
- C++中引用的使用总结
- 自定义material design 风格的Dialog
- spring 的AOP
- MongoDB线上实践指南-基础篇之支撑百亿级访问(四)
- mybatis中循环嵌套
- js跨域调用报表
- java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.core.Config
- Ubuntu系统下手动安装mysql及开启外部访问
- 配置一个适合自己使用习惯的Android studio
- 如何正确获取百度定位Keystore,解决百度地图不显示问题
- UIWebView (NSURLProtocol)拦截js、css
- Android为控件原有background动态设置颜色