MongoDB 是今朝主流的 NoSQL 数据库之一,与关系型数据库和其它的 NoSQL 不合,MongoDB 应用了面向文档的数据存储方法,将数据以类似 JSON 的方法存储在磁盘上,因为项目上的一些汗青遗留问题,作者在比来的工作中也不得不经常与 MongoDB 打交道,这也是这篇文┞仿出现的原因。
固然在之前也对 MongoDB 有所懂得,然则真正在项目中大年夜范围应用照样第一次,应用过程中也裸露了大年夜量的问题,不过在这里,我们重要对 MongoDB 中的一些重要概念的道理进话旧绍,也会与 MySQL 这种传统的关系型数据库做一个比较,让读者自行断定它们之间的优势和劣势。
概述
MongoDB 固然也是数据库,然则它与传统的 RDBMS 比拟有着巨大年夜的不合,很多开辟者都认为或者被灌注贯注了一种思惟,MongoDB 这种无 Scheme 的数据库比拟 RDBMS 有着巨大年夜的机能晋升,这个断定其实是一种误会;因为数据库的机能不止与数据库本身的设计有关系,还与开辟者对表构造和索引的设计、存储引擎的选择和营业有着巨大年夜的关系,如不雅认为 仅进行了数据库的调换就能获得数量级的机能晋升 ,那照样太年青了。
架构
现有风行的数据库其实都有着异常类似的架构,MongoDB 其实就与 MySQL 中的架构相差不多,底层都应用了『可插拔』的存储引擎以知足用户的不合须要。
用户可以根据表中的数据特点选择不合的存储引擎,它们可以在同一个 MongoDB 的实例中应用;在最新版本的 MongoDB 中应用了 WiredTiger 作为默认的存储引擎,WiredTiger 供给了不合粒度的并发控制和紧缩机制,可以或许为不合种类的应用供给了最好的机能和存储效力。
除了迪?髦段索引这种异常简单的索引类型之外,MongoDB 还支撑多个不合字段构成的复合索引(Compound Index),因为 MongoDB 中支撑对同一字段的┞俘逆序分列,所以比拟于 MySQL 中的帮助索引就会出现更多的情况:
萌芽说话的复杂是因为 MongoDB 支撑了很多的数据类型,同时每一条数据记录也就是文档有着异常复杂的构造,这点是大年夜设计上就没有办法避免的,所以还须要应用 MongoDB 的开辟者花一些时光去进修各类各样的 API。
- db.collection.updateMany(
- <filter>,
- <update>,
- {
- upsert: <boolean>,
- writeConcern: <document>,
- collation: <document>
- }
- )
RDBMS 与 MongoDB
MongoDB 应用面向文档的的数据模型,导致很多概念都与 RDBMS 有一些差别,固然大年夜总体上来看两者都有相对应的概念,不过概念之间细微的差别其实也会影响我们对 MongoDB 的懂得:
传统的 RDBMS 其实应用 Table 的格局将数据逻辑地存储在一张二维的表中,个中不包含任何复杂的数据构造,然则因为 MongoDB 支撑嵌入文档、数组和哈希等多种复杂数据构造的应用,所以它最终将所有的数据以 BSON 的数据格局存储起来。
RDBMS 和 MongoDB 中的概念都有着互相对应的关系,数据库、表、行和索引的概念在两中数据库中都异常类似,唯独最后的 JOIN 和 Embedded Document 或者 Reference 有着巨大年夜的差别。这一点差别其实也影响了在应用 MongoDB 时对集合(Collection)Schema 的设计,如不雅我们在 MongoDB 中遵守了与 RDBMS 中雷同的思惟对 Collection 进行设计,那么就弗成避免的应用很多的 "JOIN" 语句,而 MongoDB 是不支撑 "JOIN" 的,在应用内做这种萌芽的机能异常异常差,在这时应用嵌入式的文档其实就可以解决这种问题了,嵌入式的文档固然可能会造成很多的数据冗余导致我们在更新时会很苦楚,然则萌芽时确切异常敏捷。
- {
- _id: <ObjectId1>,
- name: "draveness"
推荐阅读
年薪40万的程序员为啥找不到女朋友?这是我见过最精彩的回答!
今天看到一位题主问了一个问题:年薪40万的法度榜样员为什么找不到女同伙!哈,问题不出色评论出色,来和小编一路看看你吧我熟悉的男法度榜样员,大年夜多集技艺与逗比于一身,读得了《边>>>详细阅读
地址:http://www.17bianji.com/lsqh/37233.html
1/2 1