作家
登录

[浅入浅出]MongoDB和WiredTiger

作者: 来源: 2017-09-07 16:47:50 阅读 我要评论

主键和索引

在这一节中,我们将重要介绍 MongoDB 中不合类型的索引,当然也包含每个文档中异常重要的字段 _id ,可以 懂得 为 MongoDB 的『主键』,除此之外还会介绍单字段索引、复合索引以及多键索引等类型的索引。

MongoDB 中索引的概念其实与 MySQL 中的索引相差不多,无论是底层的数据构造照样根本的索引类型都几乎完全雷同,两者之间的差别就在于因为 MongoDB 支撑了不合类型的数据构造,所以也理所应本地供给了更多的索引种类。

[浅入浅出]MongoDB和WiredTiger

默认索引

MySQL 中的每一个数据行都具有一个主键,数据库中的数据都是按照以主键作为键物理地存储在文件中的;除了用于数据的存储,主键因为其特点也可以或许加快数据库的萌芽语句。

而 MongoDB 中所有的文档也都有一个独一的 _id 字段,在默认情况下所有的文档都应用一个长 12 字节的 ObjectId 作为默认索引:

前四位代表当前 _id 生成时的 Unix 时光戳,在这之后是三位的机械标识符和两位的处理器标识符,最后是一个三位的计数器,初始值就是一个随机数;经由过程这种方法代替递增的 id 可以或许解决分布式的 MongoDB 生成独一标识符的问题,同时可以在必定程度上包管 id 的的增长是递增的。

单字段索引(Single Field)

[浅入浅出]MongoDB和WiredTiger

除了 MongoDB 供给的默认 _id 字段之外,我们还可以建立其它的单键索引,并且个中不止支撑次序的索引,还支撑对索引倒排:

  1. db.users.createIndex( { age: -1 } ) 

MySQL8.0 之前的索引都只能是正序分列的,在 8.0 之后才惹人了逆序的索引,迪?髦段索引可以说是 MySQL 中的帮助(Secondary)索引的一个子集,它只是对除了 _id 外的随便率性迪?髦段建立起正序或者逆序的索引树。

复合索引(Compound)

  1. db.users.createIndex( { username: 1, age: -1 } )  
  2. db.users.createIndex( { username: 1, age: 1 } ) 

膳绫擎的两个索引是完全不合的,在磁盘上的 B+ 树其实也按照了完全不合的次序进行存储,固然 username 字段都是升序分列的,然则对于 age 来说,两个索引的处理是完全相反的:

[浅入浅出]MongoDB和WiredTiger

这也就造成了在应用萌芽语句对集合中数据进行查找时,如不雅商定了正逆序,那么其实是会应用不合的索引的,所以在索引创建时必定要推敲好应用的场景,避免创建无用的索引。

多键索引(Multikey)

因为 MongoDB 支撑了类似数组的数据构造,所以也供给了名为多键索引的功能,可以将数组中的每一个元素进行索引,索引的创建其实与单字段索引没有太多的差别:

然则 MongoDB 中的┞封种引用不像 MySQL 中可以直接经由过程 JOIN 进行查找,我们须要应用额外的萌芽找到该引用对应的模型,这固然供给了更多的灵活性,不过因为增长了客户端和 MongoDB 之间的交互次数(Round-Trip)也会导致萌芽变慢,甚至异常严重的机能问题。

  1. db.collection.createIndex( { address: 1 } ) 

如不雅一个字段是值是数组,那么在应用上述代码时会主动为这个字段创建一个多键索引,可以或许加快对数组中元素的查找。

文本索引(Text)

文本索引是 MongoDB 为我们供给的另一个比较实用的功能,不过在这里也执偾对这种类型的索引提一下,也不计算深刻去谈谈这器械的机能若何,如不雅真的要做全文索引的话,照样推荐应用 Elasticsearch 这种更专业的器械来做,而不是应用 MongoDB 供给的┞封项功能。

存储

若何存储数据就是一个比较重要的问题,在前面我们已经提到了 MongoDB 与 MySQL 一样都供给了插件化的存储引擎支撑,作为 MongoDB 的重要组件之一,存储引擎全权负责了 MongoDB 对数据的治理。

在不合的存储引擎上层的就是 MongoDB 的数据模型和萌芽说话了,与关系型数据库不合,因为 MongoDB 对数据的存储与 RDBMS 有较大年夜的差别,所以它创建了一套不合的萌芽说话;固然 MongoDB 萌芽说话异常强大年夜,支撑的功能也很多,同时也是可编程的,不过个中包含的内容异常复杂、API 设计也不是异常优雅,所以照样须要一些进修成本的,对于长时光应用 MySQL 的开辟者肯定话苄些不习惯。

[浅入浅出]MongoDB和WiredTiger

WiredTiger

MongoDB3.2 之后 WiredTiger 就是默认的存储引擎了,如不雅对各个存储引擎并不懂得,那么照样不要改变 MongoDB 的默认存储引擎;它有着异常多的长处,比如拥有效力异常高的缓存机制:


  推荐阅读

  年薪40万的程序员为啥找不到女朋友?这是我见过最精彩的回答!

今天看到一位题主问了一个问题:年薪40万的法度榜样员为什么找不到女同伙!哈,问题不出色评论出色,来和小编一路看看你吧我熟悉的男法度榜样员,大年夜多集技艺与逗比于一身,读得了《边>>>详细阅读


本文标题:[浅入浅出]MongoDB和WiredTiger

地址:http://www.17bianji.com/lsqh/37233.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)