文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
实践篇
适用场景
- 网站数据、缓存等大尺寸、低价值的数据
- 在高伸缩性的场景,用于对象及 JSON 数据的存储。
以下具备一条以上,就可以考虑选用 MongoDB
- 我的数据量是有亿万级或者需要不断扩容
- 需要 2000-3000 以上的读写每秒
- 新应用,需求会变,数据模型无法确定
- 我需要整合多个外部数据源
- 我的系统需要 99.999%高可用
- 我的系统需要大量的地理位置查询
- 我的系统需要提供最小的 latency
- 我要管理的主要数据对象<10
慎用场景 | 原因 |
---|---|
PB 数据持久存储大数据分析数据湖 | Hadoop、Spark 提供更多分析运算功能和工具,并行计算能力更强 MongoDB + Hadoop/Spark |
搜索场景:文档有几十个字段,需要按照任意字段搜索并排序限制等 | 不建索引查询太慢,索引太多影响写入及更新操作 |
ERP、CRM 或者类似复杂应用,几十上百个对象互相关联 | 关联支持较弱,事务较弱 |
需要参与远程事务,或者需要跨表,跨文档原子性更新的 | MongoDB 事务支持仅限于本机的单文档事务 |
100% 写可用:任何时间写入不能停 | MongoDB 换主节点时候会有短暂的不可写设计所限 |
MongoDB 查询技巧
- 限定返回结果条数和字段:可以减少开销。
- 避免合用 skip 跳过大量结果。可以内置查询条件(需要用到带索引的排序字段),用上一次结果来计算下一次查询。
- 避免使用
$where
。这个操作符不能用索引,需要先将 BSON 对象转化成 JSON 对象,才可以用$where
表达式。通常它比常规查询慢得多。 - MapReduce 不能作实时查询。MapReduce 有很好的聚合功能,用于统计,但执行时涉及远程交互,会比较慢。它适合处理大数据量的离线统计分析。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论