本文目录导航:
MongoDB 索引
Nothing like a little truth to sober you up. 唯有理想最能让人苏醒。
索引支持在MongoDB中高效地口头查问。
假设没有索引,MongoDB必定口头选汇合扫描,即扫描汇合中的每个文档,以选用与查问语句婚配的文档。
这种扫描选汇合的查问效率是十分低的,特意在处置少量的数据时,查问可以要破费几十秒甚至几分钟,这对网站的性能是十分致命的。
假设查问存在适当的索引,MongoDB可以经常使用该索引限度必定审核的文档数。
索引是不凡的数据结构,它以易于遍历的方式存储汇合数据集的一小局部。
索引存储特定字段或一组字段的值,按字段值排序。
索引项的排序支持有效的相等婚配和基于范围的查问操作。
此外,MongoDB还可以经常使用索引中的排序前往排序结果。
官方文档:
MongoDB索引经常使用B树数据结构(确切的说是B-Tree,MySQL是B+Tree)
MongoDB的索引可以分为:单字段索引、复合索引以及天文空间索引等。
单字段索引:MongoDB支持在文档的单个字段上创立用户定义的升序/降序索引,称为单字段索引(Single Field Index)。
关于单个字段索引和排序操作,索引键的排序顺序(即升序或降序)并不关键,由于MongoDB可以在任何方向上遍历索引。
复合索引:MongoDB还支持多个字段的用户定义索引,即复合索引(Compound Index)。
复合索引中列出的字段顺序具有关键意义。
例如,假设复合索引由 { userid: 1, score: -1 } 组成,则索引首先按userid正序排序,然后在每个userid的值内,再在按score倒序排序。
其余索引:
天文空间索引(Geospatial Index):为了支持对天文空间坐标数据的有效查问,MongoDB提供了两种不凡的索引:前往结果时经常使用平面几何的二维索引和前往结果时经常使用球面几何的二维球面索引。
文本索引(Text Indexes):MongoDB提供了一种文本索引类型,支持在汇合中搜查字符串内容。
这些文本索引不存储特定于言语的中止词(例如“the”、“a”、“or”),而将汇合中的词作为词干,只存储根词。
哈希索引(Hashed Indexes):为了支持基于散列的分片,MongoDB提供了散列索引类型,它对字段值的散列启动索引。
这些索引在其范围内的值散布愈加随机,但只支持相等婚配,不支持基于范围的查问。
检查索引
前往一个汇合中的一切索引的数组
语法格局 : ()
提示 :该语法命令运转要求是MongoDB 3.0+
示例
结果中显示的是自动 _id 索引。
自动_id索引 :MongoDB在创立汇合的环节中,在 _id 字段上创立一个惟一的索引,自动名字为id,该索引可防止客户端拔出两个具有相反值的文档,您不能在_id字段上删除此索引。
留意 :该索引是惟一索引,因此值不能重复,即 _id 值不能重复的。
在分片集群中,理论经常使用 _id 作为片键。
创立索引
在汇合上创立索引。
语法格局 : (keys, options)
参数说明 :
options(更多选项)列表:
留意 :在 3.0.0 版本前创立索引方法为(),之后的版本经常使用了()方法, ensureIndex()还能用,但只是createIndex()的别名。
实例
移除索引
可以移除指定的索引,或移除一切索引
语法格局 : (index)或移除一切索引()
参数说明 :
实例
提示 : _id 的字段的索引是无法删除的,只能删除非 _id 字段的索引。
口头方案
剖析查问性能(Analyze Query Performance)理论经常使用口头方案(解释方案、Explain Plan)来检查查问的状况,如查问消耗的期间、能否基于索引查问等。
那么,理论,咱们想知道,建设的索引能否有效,成果如何,都须要经过口头方案检查。
语法格局 : (query,options)(options)
实例
涵盖查问Covered Queries
当查问条件和查问的投影仅蕴含索引字段时,MongoDB间接从索引前往结果,而不扫描任何文档或将文档带入内存。
这些笼罩的查问可以十分有效。
我的了解是相似于mysql的索引笼罩,毋庸回表查问。
实例
有故事的人,理论不喜爱讲故事。
不想在嘴上卖命,是想在心中开发能量。
缄默,是一种负重的坚强,是一种韬光养晦的低调。
少说多做,才是最有力的践行。
windows下MongoDB的装置及性能
MongoDB 是目前在IT行业十分盛行的一种非相关型数据库(NoSql),其灵敏的数据存储方式备受以后IT从业人员的青眼。
这里关键讲如何在windows平台下装置MongoDB。
登陆mongodb官方点击右侧的下载选用windows平台,如图点击须要的 zip文件下载(笔者这里关键讲诉zip文件的装置) legacy版本可以用于旧版本系统下装置,这里不介绍。
将zip文件解压放到盘符的 根目录(如C:或D:),为了繁难倡导文件夹命名尽量冗长如(d:\mongodb)创立数据库文件的寄存位置,比如d:/mongodb/data/db。
启动mongodb服务之前须要必定创立数据库文件的寄存文件夹,否则命令不会智能创立,而且不能启动完成。
关上cmd(windows键+r输入cmd)命令行,进入D:\mongodb\bin目录(如图先输入d:进入d盘然后输入cd d:\mongodb\bin), 输入如下的命令启动mongodb服务: D:/mongodb/binmongod --dbpath D:\mongodb\data\dbmongodb自动衔接端口,假设产生如图的状况,可以关上检查(笔者这里是chrome),发现如图则示意衔接完成,假设不完成,可以检查端口能否被占用。
其实可以将MongoDB设置成Windows服务,这个操作就是为了繁难,每次开机MongoDB就智能启动了。
如图在d:\mongodb\data下新建文件夹log(寄存日志文件)并且新建文件 在d:\mongodb新建文件用记事本关上输入: dbpath=D:\mongodb\data\db logpath=D:\mongodb\data\log\ (图片的logpath有失误)用 治理员身份关上cmd命令行,进入D:\mongodb\bin目录,输入如下的命令: D:\mongodb\binmongod --config D:\mongodb\ 有人提示改为如下: mongod --config D:\mongodb\ --install --serviceName MongoDB 如图结果寄存在日志文件中,检查日志发现曾经完成。
假设失败有或者没有经常使用治理员身份,遭到拒绝访问。
关上cmd输入检查服务可以看到MongoDB服务,点击可以启动。
全方位对比 Postgres 和 MongoDB (2023 版)
对比Postgres和MongoDB,了解哪款数据库更适宜你的需求。
Postgres和MongoDB均在世界数据库市场中占据关键位置。
依据2023年Stack Overflow调研,Postgres已成为最受欢迎的数据库之一。
而MongoDB则在2017年至2020年间延续蝉联最盼望经常使用的数据库头衔。
两者均排在世界数据库排名前五,正逐渐冲击Oracle、MySQL及Microsoft SQL Server的市场份额。
MongoDB最后被视为与Postgres等SQL数据库相统一的NoSQL数据库,但近年来两者正逐渐趋同。
The Guardian曾颁布长文讨论将MongoDB迁徙至Postgres的或者性,虽然时过境迁,但迁徙数据库的痛苦环节并未扭转。
Bytebase与多个数据库包括Google Cloud SQL严密协作,然后者更是由Bytebase开创人所创立。
在对比Postgres和MongoDB时,咱们将从以下几个维度启动评价:容许证、数据模型、JSON支持、性能、牢靠性、伸缩性、易用性、可运维性、生态系统以及两者之间的选用。
Postgres和MongoDB均准许企业级经常使用,Postgres支持JSON列,使其具有与MongoDB相似的性能,可以经常使用JSONB格局处置JSON。
两者在处置JSON方面均体现杰出,MongoDB经常使用自定义BSON格局,而Postgres经常使用JSONB格局。
无关在Postgres中经常使用BSON或JSONB之间的讨论,可参考相关资源。
性能方面,MongoDB在触及多个实体的操作时理论更优,由于其数据去规范化,无需启动复杂的表间衔接。
而Postgres则长于处置复杂查问,得益于其弱小的SQL和先进的查问提升器。
牢靠性方面,MongoDB早期因不支持ACID事务而遭到质疑,但经过收买WiredTiger并经常使用其存储引擎,当初的MongoDB与Postgres一样稳固牢靠。
MongoDB经过正本集提供内置的智能缺点转移性能,而Postgres则须要第三方处置方案,如pg_auto_failover。
伸缩性方面,MongoDB支持横向裁减,而Postgres理论驳回纵向裁减。
MongoDB是一个散布式数据库,支持智能分片,而Postgres的分片处置方案理论会在纵向裁减之后思考经常使用。
易用性方面,MongoDB驳回无预设形式的架构,易于上手,官方驱动程序使其与MongoDB数据库交互变得繁难直观。
Postgres则要求对schema启动解放,虽然在相关型数据库中相对严厉。
Stack Overflow调研显示,虽然Postgres是受访者中最受欢迎的数据库,但在新手用户中,MongoDB更受欢迎。
处置复杂查问时,MongoDB的MQL性能不如Postgres的SQL弱小。
可运维性方面,运转多节点MongoDB比运转多节点Postgres更为简便,由于分片和缺点转移由MongoDB处置。
在单节点部署下,MongoDB的散布式个性或者成为累赘。
生态系统方面,Postgres领有可裁减架构并由社区保养,近年来生态系统蓬勃开展。
MongoDB采取商业化战略,收买了低劣的处置方案,以确保成为其产品线无法或缺的局部。
Postgres是一个通用数据库,驳回相关模型,提供片面的SQL性能和裁减架构,由激情社区驱动。
MongoDB是一个片面的数据库处置方案,遍及文档模型,具有伸缩性和高可用性,提供完整的开发者体验,由营利性商业实体推进。
选用Postgres或MongoDB取决于特定需求。
在某些畛域中,一个数据库显著优于另一个,但在大少数运行程序用例中,两者都体现出弱小才干。
组织内同时经常使用Postgres和MongoDB也很经常出现。
关于Postgres和MongoDB的生命周期治理,Bytebase是一个值得思考的工具。
欲深化了解Bytebase,请访问其官方并收费注册云账号,立刻体验。