加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

开始行使MongoDB之前应该知道的14件事

发布时间:2018-11-02 16:03:46 所属栏目:编程 来源:用户1914672199
导读:本文要点 纵然MongoDB没有逼迫要求,计一律个模式照旧至关重要。 相同地,在计划模式及会见模式时计划好索引。 停止大工具,尤其是大数组。 审慎看待MongoDB的配置,尤其是关乎安详和不变性时。 MongoDB没有查询优化器,因此,对付怎样布置查询操纵的次序
副问题[/!--empirenews.page--]

开始行使MongoDB之前应该知道的14件事

本文要点

纵然MongoDB没有逼迫要求,计一律个模式照旧至关重要。

相同地,在计划模式及会见模式时计划好索引。

停止大工具,尤其是大数组。

审慎看待MongoDB的配置,尤其是关乎安详和不变性时。

MongoDB没有查询优化器,因此,对付怎样布置查询操纵的次序,你必需分外警惕。

我从事数据库相干事变已经很长时刻了,可是最近才开始行使MongoDB。在开始行使MongoDB之前,我但愿有些工作我已经知道。按照一样平常履历,对付数据库是什么以及它们醒目什么,人们会有先入为主的熟悉。为了给他人提供利便,本文列出了一些常见的错误。

建设一个无需身份验证的MongoDB处事器

很遗憾,MongoDB在安装时默认不启用身份验证。在只从当地会见的事变站上,这没什么欠好。可是,因为MongoDB是一个多租户体系,它会尽也许地占用内存,因此最好是安装在处事器上,最大限度地提供内存,纵然是开拓事变。在处事器上行使默认端口安装而不启用身份验证是在自找贫困,尤其是可以在查询中运行恣意JavaScript时(譬喻把$where作为注入进攻的载体)。

身份验证要领有多种,可是用户ID/暗码凭据最轻易安装和打点。当你思量基于LDAP的身份验证时,可以回收谁人要领。在我们评论安详时,MongoDB必需保持最新,并且,在日记里查找未授权会见的迹象老是值得的。我不喜好行使默认端口。

健忘限定MongoDB的进攻面

MongoDB的安详搜查清单为低就逮络渗出和数据泄漏风险提供了很好的提议。我们很轻易会以为,开拓处事器不必要高品级的安详。不是这样的:安详对付全部MongoDB处事器都很重要。尤其是,除非有很是好的来由要行使mapReduce、group或$where,不然你应该在设置文件中配置javascriptEnabled:false,禁用JavaScript。由于尺度MongoDB的数据文件是不加密的,其它,行使专门的用户运行MongoDB也是一个明智的做法,对数据文件的完全会见仅限于谁人用户,这样就可以行使操纵体系自带的文件会见节制了。

没有计一律个模式

对付模式,MongoDB没有逼迫要求。这不是说它不必要模式。假如你真想生涯文档而又没有同等的模式,那么你可以很是快速、简朴地生涯它们,可是检索会异常贫困。

“MongoDB模式计划的六大履历原则”是一篇值得一读的经典文章,而第三方器材(如Studio 3T)提供的相同“模式赏识器(Schema Explorer)”这样可以执行按期模式搜查的特征也是值得拥有的。

健忘排序法则(排序次序)

这比其他任何的设置错误城市导致更多的荆棘和时刻挥霍。MongoDB默认行使二进制排序法则。这对任那里所的文化都是倒霉的。在80年月,巨细写敏感、重音敏感、二进制排序法则,和念珠、土耳其长衫和卷胡子一路,被视为稀疏的期间错误。此刻,他们没法辩解了。在实际糊口中,motorbike和Motorbike就是一样,而Britain和britain就是统一个处所。小写字母和大写字母只是誊写上的等价。就不要让我再说重音字符排序法则了。当你建设一个MongoDB数据库时,行使一种合乎体系用户说话和文化的重音敏感、巨细写敏感排序法则。这使得字符串数据的检索轻易很多。

建设大文档荟萃

MongoDB乐于把最大16MB的文档置于荟萃中,而GridFS计划用于高出16MB的大文档。可是,可以容纳大文档并不料味着那是一个好主意。MongoDB在单个文档的巨细为几KB时示意最好,处理赏罚它们的方法更像宽SQL表的行。大文档会导致多种机能题目。

行使大数组建设文档

文档可以包括数组。最好是把数组元素的数目保持在四位数以下。假如数组频仍添加,会使得包括它的文档过大,那样,它在磁盘上的位置就必要移动,反过来,这意味着每个索引都必需更新。当一个包括大数组的文档从头索引时,因为每个数组元素都有一个单独的索引条目,以是会产生大量的索引重写。另外,这种从头索引在这类文档插入或删除时也会产生。

为了最小化这个题目,MongoDB有一个“添补因子(padding factor)”,为文档增添提供空间。

你大概会想,你可以通过不成立数组索引来绕开这个题目。遗憾的是,没有索引,你会碰着其他题目。由于文档会从新到尾扫描,找到一个靠近数组尾部的元素必要花更多的时刻,大部门处理赏罚这个文档的操纵城市变慢。

健忘聚合环境下的阶段排序

在有查询优化器的数据库体系中,你编写的查询是声名你想要什么而不是怎样获取它。这就像在餐馆中点餐;你凡是只必要点菜,而不必对厨师发出具体的指令。

在MongoDB中,你是对厨师发指令。譬喻,你必要通过$match和$project确保管道中的数据尽早镌汰,排序只在数据镌汰时产生一次,查找凭证你但愿的次序执行。查询优化器省去了不须要的事变,优化阶段次序,选择毗连范例,这会把你宠坏。MongoDB给了你更多的节制,但这种便利是有本钱的。

像Studio 3T这样的器材使构建精确的MongoDB聚合查询变得更轻易。它的聚合编辑器特征使你可以一次对一个阶段应用管道操纵符,你可以在每个阶段验证输入和输出,更便于调试。

行使快速写

永久不要把MongoDB设为低不变性的高速写。看上去,“file-and-forget”模式使得写入速率变快了,由于呼吁在现实写入任何对象前就返回了。假如体系在数据写入磁盘之前瓦解了,就会丢失,存在呈现纷歧致状态的风险。所幸,64位的MongoDB启用了“日记(Journaling)”。

MMAPv1和WiredTiger存储引擎都行使日记提防上述环境,不外,在日记封锁的环境下,WiredTiger也可以在还原进程中规复到最后同等的搜查点。

日记可以确保数据库在规复时处于同等状态,它会生涯日记写入时的全部数据。日记写入的时距离断可以行使运行时选项commitIntervalMs来设置。

为了确保写入,就要确保在设置文件中启用日记(storage.journal.enabled),并且提交隔断要和你可以或许包袱的数据丢失相对应。

无索引排序

在搜刮和聚合中,你常常但愿排序数据。进展那是在最后阶段完成的,在功效过滤之后,从而镌汰必要排序的数据量。纵然在谁人时辰,你必要一个可以包围排序的索引。单键索引或殽杂索引都可以。

当没有吻合的索引可用时,MongoDB就不得不在没有索引的环境下排序。对付排序操纵中全部文档的总巨细,有32MB的内存限定,假如MongoDB到达了这个限值,它就会发生错误,可能偶然辰仅仅返回一个空的记录集。

Lookup而没有索引支持

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读