前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MongoDB-4.0 使用注意事项

MongoDB-4.0 使用注意事项

作者头像
cosmozhu
发布2020-06-15 06:36:51
6240
发布2020-06-15 06:36:51
举报
文章被收录于专栏:cosmozhu技术篇cosmozhu技术篇

MongoDB服务默认是无认证模式

新建的MongoDB服务是无认证模式,即不需要用户名和密码就可以登录数据库。在有更好的认证方式(LDAP)前,用户名/密码是基本的认证方式。保持MongoDB服务的更新,并持续关注日志中是否有未经授权访问的迹象。

减少MongoDB的被攻击面

MongoDB的安全检查表为降低网络渗透和数据泄露提供了很好的建议。在没有必须的理由时,最好在配置文件中禁用javascript的使用。由于MongoDB的数据文件为加密,最好用专用用户来运行MongoDB。

架构设计

这篇文章值得一读<6 Rules of Thumb for MongoDB Schema Design>.

忘记排序规则

MongoDB默认使用二进制排序。当你创建一个MongoDB库默认使用不区分大小写的排序规则。选择适合系统用户的语言文化,将使查询字符串数据非常容易。

创建大文档的集合

文档中可以包含数组,但最好保持数据数量在4位数以下。如果数据被添加的很频繁,它将超出分配给文档的空间,因此必须移动文档位置,更新每个索引。

MongoDB有一个填充因子可以给文档提供增长的空间,来避免此问题。

也许你认为可以不给数组字段建立索引来规避这个问题,但没有索引将会遇到其它问题。例如由于从头到尾扫描文档因此在数据末尾查找元素花费的时间更长,处理此类文档的大多数操作都很慢。

快速写入

不要使用writeconcern为0的快速写入,种方式下如果数据在写入磁盘之前出现系统崩溃,数据将丢失且处于不一致状态。

MMAPv1和WiredTiger存储引擎都使用了journal来防止这种情况,如果journal关闭,在恢复过程中WiredTiger将恢复到最后一个一致检查点。

日志写入之间的持续时间可以使用commitIntervalMs配置

无索引排序

在查询过程中通常都需要对数据排序,我们往往希望在查询的最后一个阶段来完成这个操作以减少排序的数据量。尽管如此你仍然需要一个索引来替代排序,简单索引和复合索引都可以。

如果没有合适的索引,MongoDB将会排序,排序操作中所有文档的总大小都32M内存限制,如果到达该限制,它将产生错误或偶尔返回空记录集。

hash对象中键的顺序很重要

在JSON中键值对的顺序是无序的,然而在BSON中键的顺序很重要,{ firstname: "Phil", surname: "factor" }{ surname: "factor", firstname: "Phil" }是不一样的。

null和undefined混淆不清

undefined在JSON标准定义中从来没有出现过。它仅在JavaScript中出现。在BSON中已经弃用,换成了$null。避免在MongoDB中出现undefined

仅用$limit()而不用$sort()

通过我们通过使用$limit()来限制查询返回的结果数。但再最终版的代码中不能仅使用$limit(),因为这样无法保证结果的顺序,必须先使用$sort()来保证结果顺序,然后才能使用$limit()来限制数据结果数。

相关文章

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MongoDB服务默认是无认证模式
  • 减少MongoDB的被攻击面
  • 架构设计
  • 忘记排序规则
  • 创建大文档的集合
  • 快速写入
  • 无索引排序
  • hash对象中键的顺序很重要
  • null和undefined混淆不清
  • 仅用$limit()而不用$sort()
  • 相关文章
相关产品与服务
云数据库 MongoDB
腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档