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

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

发布时间:2018-11-02 14:50:40 所属栏目:编程 来源:用户1914672199
导读:本文要点 即使MongoDB没有强制要求,设计一个模式还是至关重要。 类似地,在设计模式及访问模式时设计好索引。 避免大对象,尤其是大数组。 谨慎对待MongoDB的设置,尤其是关乎安全和稳定性时。 MongoDB没有查询优化器,因此,对于如何安排查询操作的顺序

Lookup的功能和SQL联合查询类似。为了获得良好的性能,作为外键的键值上需要有索引。这并不明显,因为其使用并没有在explain()中报告。这些索引并不包含在explain()记录的索引里,那些索引是供管道操作符$match、$sort出现在管道开始时使用的。现在,索引可以覆盖聚合管道的任何阶段。

不使用多条更新

db.collection.update()方法用于修改一个已存在文档的一部分或全部,或者是整个替换一个已存在的文档,这取决于你提供的更新参数。除非你设置multi参数,更新匹配查询条件的所有文档,否则它不会更新集合里的所有文档。这一点不是那么明显。

忘记哈希对象中键序的意义

在JSON中,一个对象包含一个无序集合,而该集合中有零个或多个名/值对,其中名是一个字符串,而值是一个字符串、数值、布尔值、空、对象或数组。

遗憾的是,BSON在做搜索时给顺序赋予了意义。在MongoDB中,嵌入对象中键的顺序很重要,也就是说,{ firstname: "Phil", surname: "factor" }和{ surname: "factor", firstname: "Phil" }就不匹配。这意味着,你必须保留文档中名/值对的顺序,如果你想确保可以找到它们的话。

混淆“null”和“undefined”

根据正式的JSON标准(ECMA-404第5节),“undefined”值在JSON中从来就是不合法的,虽然它事实上已经在JavaScript中使用。而且,它在BSON中是“deprecated”,会转换成$null,这并不是一个总令人满意的解决方案。在MongoDB中,要避免使用“undefined”。

使用$limit()而未用$sort()

通常,当你在MongoDB中开发时,仅仅查看查询或聚合返回的结果的样例会很有用。 $limit()就是为了满足这个要求,但是,它永远不应该出现在最终版本的代码中,除非你首先使用了$sort。这是因为,不这样的话,你就无法保证结果的顺序,你就无法可靠地“按页浏览”数据。为了确保可靠性,查询或聚合必须是“确定的”,就是说,它们每次执行都会给出相同的结果。包含$limit而不包含$sort的代码不是确定的,后续会导致难以跟踪的Bug。

小结

对于MongoDB,让你最终感到失望的唯一方式是把它直接和另一种类型的数据库如RDBMS比较,或者对它有特别的期待。这就像把桔子和叉子比较。数据库系统有它们的用途。最好是理解并领会这些差别。强迫MongoDB开发人员按照RDBMS的方式做事就太遗憾了,我希望继续看到解决旧问题的有趣的新方法,如确保数据完整性、使数据系统具有从故障和恶意破坏中恢复的能力。

在4.0版本中,MongoDB引入了ACID事务处理,这是以创新方式引入重大改善的一个很好的例子。多文档、多语句事务现在是原子的了,它允许开发人员调整用于获取锁的时间,过期挂起事务以及修改隔离级别。

【编辑推荐】

  1. 删库跑路?这篇文章教你如何使用xtraback备份MySQL数据库
  2. 选择合适开源数据库的五个要点
  3. MongoDB怒改开源协议!不爽这些云计算厂商不付钱!
  4. 关系型数据库尚能饭否?NoSQL、NewSQL谁能接棒?
  5. 没遇到过这十个MySQL数据库经典错误,你一定不是个好工程师
【责任编辑:庞桂玉 TEL:(010)68476606】
点赞 0

(编辑:核心网)

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

热点阅读