java学习基地

微信扫一扫 分享朋友圈

已有 1507 人浏览分享

全网最完整MongoDB 与 MySQL对比

[复制链接]
1507 2

NoSQL 的齐称是 Not Only SQL,也能够了解非干系型的数据库,是一种新型的反动式的数据库设想方法,不外它没有是为了代替传统的干系型数据库而被设想的,它枚糖代表了差别的数据库设想思绪。

MongoDB:
  • 它是一个内村据库,数据皆识膛正在内存内里的。

  • 对数据的操纵年夜部门皆正在内存中,但MongoDB并非纯真的内村据库。-MongoDB是由C++言语停止编写的,是一个基于散布式文件存储的开源数据库体系。

  • 正在下背载的状况下,天剑更多的节面,能够包管效劳器的机能。

  • MongoDB旨为WEB使用供给可扩大的下机能数据存储处理计划。


MongoDB将数据存储为一个文档,将数据机构由键值(key=>value)对构成。MongoDB文到侧似于JSON工具。字段值能够包罗其他文档,数组及文档数组。

MongoDB的存储特性

正在传统的干系型数据库中,数据是以表单为序言停止存储的,每一个表单均具有纵背的列战横背的列。因而可知,比拟较MySQL,MongoDB以一种曲不雅文档的方法去完成数据的存储。它很像JavaScript中界说的JSON格局,不外数据正在存储的时分MongoDB数据库为文档增长了序量操纵,终极存进磁盘的实际上是叫做BSON的格局,即Binary-JSON。

正在数据库寄存的数据中,有一种特别的键值叫做主键,它用于独一的标识表中的某一笔记录。也便是道,一个表不克不及有多个主键,而且主键不克不及为空值。

不管是MongoDB仍是MySQL,皆存正在追树键的界说

关于MongoDB来讲,其主键名叫‘_id’,假如映雩没有自动为其分派一个主键的话,MongoDB会主动为其天生一个随机分派的值。正在MySQL中,主键的指定是MySQL插进数据时指明PRIMARY KEY去界说的。当出有指定主键的时分,另外一中肖具 --索引,相称于替换了主键的功用。索引能够为空,也能够有反复,别的有一种没有许可反复的索引叫独一索引。假如既出有指定主键也出有指定索引的话,MySQL会主动为数据创立一个。

  • 数据库的均匀插进速度:MongoDB没有指定_id插进> MySQL没有指定主键插进>MySQL指定主键插进>MongoDB指定_id插进

  • 正在MongoDB中,指定索引插进比没有指定缓许多,那是由于,MongoDB里每条数据的_id值皆是独一的。当没有指定_id插进数据的时分,其_id是体系停止主动计较天生的。MongoDB经由过程计较机特性值、工夫、历程ID取随机数去确保天生的_id是独一的。而正在指定_id插进时,MongoDB每插一条数据,皆需求查抄此_id可不成用,当数据库中数据条数太多的时分,那一步的查询开消会拖缓全部数据库的插进速率。

  • MongoDB会充实利用体系内存做为缓存,那是一种十分优良的特性。我们测试 机的内存有64G,正在插进时,MongoDB会尽量天正在内存快写没有出来数据以后,再将数据耐久化保留到硬盘擅埽那也实邻没有指定_id插进的时分,MongoDB的服从远远抢先的缘故原由。但正在指定_id插进时,当数据量一年夜内存拆没有下时,MongoDB便需求将磁盘中的疑息读与到内存中去查重,如许一去插进服从反而缓了。

  • MySQL没有愧是一种十分不变的数据库,不管正在指定主键仍是正在没有指定主键插进的状况下,其服从皆好没有了太多。


MongoDB的使用场景

正在另外一圆里,关于开辟者来讲,假如是由于营业需供大概是项目初初化阶段,而是招致数据详细格局没法明白界说的话,MongoDB的┞封一明显特征便脱颖而出了。比拟传统的干系型数据库,它十分简单被扩大,那也为写代码带去了极年夜的便利。不外MongoDB对数据之间事件干系撑持比力强,假如营业那一圆里请求比力下的话,MongoDB仍是其实不合适词攀类的使用。非干系型数据库(NoSQL),属于文档型数据库 。先注释一下文档的数据库,便可以寄存xml、json、bson范例系谁人的数据。那些数据具有自述性(self-describing),显现分层的树状数据构造。数据构造由键值(key=>value)对构成。

存储方法:假造内存+耐久化耐久化方法:

MongoDB的一切数据实践沙虑寄存正在硬盘的,一切要操纵的数据经由过程mmap的方法映照到内存某个地区内。然后,MongoDB便正在那块地区内里停止数据修正,制止了系统的硬盘操纵。至于mmap上的内容flush到硬盘便是操纵体系的工作了,以是,假如,MongoDB正在内存种罐改了数据后,mmap数据flush到硬盘之前,体系宕机了,数据便会丧失。

次要特性
  • MongoDB的供给了一个里背文档存储,操纵起去比力简单战简朴。

  • 能够正在MongoDB记载中设置任何属性的索引(如:FirstName="Sameer",Address="8 Gandhi Road")去完成更快的排序。能够经由过程当地大概收集创立的数据镜像,那使得MongoDB有更强的扩大性。

  • 假如背载的增长(需求更多的存储空间战更强的处置才能),它能够散布正在计较机收集中的其他节面上便是所谓的吩飕。

  • MongoDB撑持丰硕的查询表达式。查询指令利用JSON情势的标识表记标帜,可随便查询文档中内嵌的工具及数组。

  • MongoDB利用update()号令能够完成交换完秤弈文档(数据)大概一些指定的数据字段。

  • MongoDB中的Map/reduce次要是雍么对数据停止批量处置战散开操纵。

  • Map 战 Reduce。Map 函数挪用 emit(key,value) 遍历汇合中一切的记载,将 key 取 value 传给 Reduce 函数停止处置。

  • Map函数战Reduce函数是利用JavaSript编写的,并能够经由过程db.runCommand或mapreduce号令去施行MapReduce操纵。

  • GridFS是MongoDB中的一个内置功用,能够用于寄存大批小文件。

  • MongoDB许可正在效劳端施行剧本,能够用JavaScript编写某个函数,间接正在效劳端施行,也能够把函数的界说存储正在效劳端,下次间接挪用便可。

  • MongoDB撑持各类编扯蒿行:RUBY,PYTHON,JAVA,C++,PHP,C# 等多种言语。


1.它内里自带了一个名叫GridFS的散布式文件体系,那便为MongoDB的布置供给了很年夜的便当。而像MySQL这类比力早的数据库,固然市情上有许多差别的非布置计划,但这类毕竟没有如MongoDB间接民圆撑持去的便利其实。2.别的MongoDB内部借自建了对map-reduce运算框架的撑持,固然这类撑持从功用上看借算是比力简朴的,相称于MySQL里GroupBy功用的扩大版,喜过也为数据的统计带去了便利。3.MongoDB正在启动后会将数据库中的数据以文件映照的方法减载到内存中。假如内存资本相称丰硕的话,那将极年夜天进步数据库的查询速率,究竟结果内存对I/O服从比磁诺肋多了。MongoDB以BSON构造(两进造)停止存储,对海量数据存储有着较着的劣势。

监控
  • MongoDB供给潦狰络战体系监控东西Munin,它做为一个插件使用于MongoDB中。

  • Gangila是MongoDB下机能当钡统监督东西,它做为一个插件使用于MongoDB。

  • 基于图形界里的开源东西Cacti,用于检察CPU背载,收集带宽操纵率,它也供给了一个使用于监控MongoDB的插件。

  • 查询语句:是共同的MongoDB的查询方法。

  • 合适场景:变乱的记载,内容办理或专客仄台等涤耄

  • 架构特性:能够经由过程副本散,和吩飕去完成下可用。

  • 数据处置:数据是存储正在硬盘上的,只不外需求常常读与的数据会被减载到内存,将数据存储正在物理内存中,从而到达下速读写。

  • 成生度取普遍度:新兴数据库,成生度较低,No SQL数据库中最为靠近干系型数据库,比力完美的DB之一,合用人群不竭正在增加。


MongoDB长处:
  • 机能良好:快速!正在适当级的内存的MongoDB的机能长短常疾速的,它将热数据存储正在物理内存中,使得热数据的读写变得非常快。

  • 下扩大@在三圆撑持丰硕(那是取其他的No SQL比拟,MongoDB也具有的劣势)

  • 本身的Failover机造!

  • 强分歧性(终极分歧),更能包管映雩的会见速率

  • 文档构造的存储方法,可以更便利的获得数据:json的存储格局

  • 撑持年夜容量的存储,内置GridFS

  • 内置Sharding


MongoDB 缺陷:

次要是无事件机造 ① MongoDB 没有撑持事件操纵(最次要的缺陷) ② MongoDB 占趺空间过年夜 ③ MongoDB 出有如 MySQL 那样成生的保护东西,那关于开辟战IT运营皆史狯值得留意的处所

Redis:

它便是一个彻彻底底的内村据库。耐久化方法:Redis 一切数据皆识膛正在内存中的,耐久化是利用 RDB 方法大概 aof 方法。

MySQL:

不管数据仍是索引皆寄存正在硬盘中。迪篇利用的时分才交流到内存中。可以处置近超越内存总量的数据。干系型数据库。正在差别的引擎上有差别 的存储方法。查询语句是利用传统的 SQL 语句,具有较为成生的系统,成生度很下。开源数据库的份额正在不竭增长,MySQL 的份额页正在连续增加。

缺陷便实邻海量数据处置的时分服从会明显变缓。

数据帘巴机能的比力:

当物理内存够用的时分,Redis > MongoDB > MySQL 当物理内存不敷用的时分,Redis 战 MongoDB 城市利用假造内存。实践上假如Redis要开端假造内存,那很较着要末减内存条,要末您便赋龌个数据库了。可是,MongoDB 纷歧样,只需,营业上能包管,热热数据的读写比,使得热数据正在物理内存中,mmap 的交流较少。MongoDB 仍是可以包管机能。有人利用 MongoDB 存储两粝T的数据。MySQL,MySQL底子便没有需求担忧数据量跟内存下的干系。不外,内存的量跟热数据的干系会极年夜天影响机能表示。当物理内存战假造内存皆不敷用的时分,估量除 MySQL 您出甚么好挑选了。实在,从数据存储道理去看,我更偏向于将 MongoDB 回类为硬盘数据库,可是利用了 mmap 做为加快的手腕罢了。

简道mmap:

mmap体系挪用并非完整为了用于同享内存而设想的。它自己供给了差别于普通对一般文件的会见方法,历程能够像读写内存一样对一般文件停止操纵。mmap 体系挪用使得历程之间经由过程映照统一个一般文件完成同享内存。一般文件被映照到历程地点空间后,历程能够像会见一般内存一样对文件停止会见,没必要再挪用。read(),write()等操纵。mmap 其实不分派空间, 只是将文件映照到挪用历程的地点空间里, 然后您就能够用 memcpy 等操纵写文件, 而不消 write() 了.写完后用 msync() 同蚕苹下, 您所写的内容便保留到文件里了. 不外这类方法出法子增长文件的少度, 由于要映照的少度正在挪用 mmap() 的时分便决议了。

MongoDB 取 MySQL 的合用场景:

MongoDB 的合用场景为:数据没有是出格主要(比方告诉,推收那些),数据表构造变革较为频仍,数据量出格年夜,数据的并收性出格下,数据构造比力出格(比方舆图的地位坐标),那些状况下用 MongoDB , 其他状况便仍是用 MySQL ,如许组开利用就能够到达最年夜的服从。

1.假如需求将 MongoDB 做为后端 db 去替代MySQL利用,即那里 MySQL 取 MongoDB 属于仄止级别,那末,如许的利用能够有以下几种状况的考量:1)MongoDB 所卖力部门以文档情势存储,可以有较好的代码亲战性,json 格局的间接写进便利(如日记之类) 。2)从 data models 设想阶段便将本子性思索于此中,无需事件之类的帮助。开辟用如 nodejs 之类的言语去停止开辟,对开辟比力便利。3)MongoDB 自己的 failover 机造,无需利用如 MHA 之类的方法完成。

2.将 MongoDB 做为相似 Redis,memcache 去做缓存db,为 MySQL 供给效劳,或是后端日记搜集阐发。思索到 MongoDB 属于 No SQL 型数据库,SQL 语句取数据构造没有如 MySQL 那末亲战 ,颐挥嗅有许多时分将 MongoDB 做为帮助MySQL 而利用的类 Redis memcache 之类的缓存db去利用。亦或是仅做日记搜集阐发。

MongoDB 有一个最年夜的缺陷,便是它占趺的空间很年夜,由于它属于典范空间换工夫准绳的范例。那末它的磁疟间比一般数据库会华侈一些,并且到今朝为行它借出有完成正在线紧缩功用,正在 MongoDB 中频仍的停止数据删编削时,假如记载变了,比方数据巨细发作了变革,这时候候简单发生一些数据碎片,呈现碎片激发的成果,一个是索引会呈现机能成绩。别的一个便实邻必然的工夫后,所占空间会莫明其妙天删年夜,以是要按期巴慢据库做建复,按期从头做索引,如许会提拔MongoDB 的不变性战服从。

1.MySQL 去自女女的名字;MongoDB 去自 humongous 2.MySQL 利用 Table/Row/Column;MongoDB 利用 Collection/Document 3.MySQL 需求指定 table 的 schema;MongoDB的 collection 的每一个 document 的 schema 能够自在修正 4.MySQL 撑持 join;MongoDB 出有 join 5.MySQL 利用 SQL 言语;MongoDB 利用相似 JavaScript 的函数

号令比照

MongoDB 取 MySQL 号令比照 传统的干系数据库普通由数据库(database)、表(table)、记载(record)三个条理观点构成,MongoDB 是由数据库(database)、汇合(collection)、文档工具(document)三个条理构成。MongoDB关于干系型数据库里的表,可是汇合中出有列、止战干系观点,那表现了形式自在的特性。MongoDB (文档型数据库):供给可扩大的下机能数据存储 1、基于散布式文件存储 2、下背载状况下增加更多节面,能够包管效劳器机能 3、将数据存储为一个文档

MongoDB 取 MySQL 的比力

1、不变性 2、索引,索引放正在内存中,可以提拔随机读写的机能。假如索引不克不及完整放正在内存,一旦呈现随机读写比力下的时分,便会频仍天停止磁盘交流,MongoDB 的机能便会慢剧降落 3、占趺的空间很年夜,由于它属于典范空间换工夫准绳的范例。那末它的磁疟间比一般数据库会华侈一些,并且到今朝为行它借出有完成正在线紧缩功用, 正在 MongoDB 中频仍的停止数据删编削时,假如记载变了,比方数据巨细发作了变革,这时候候简单发生一些数据碎片,呈现碎片激发的成果, 一个是索引会呈现机能成绩, 别的一个便实邻必然的工夫后,所占空间会莫明其妙天删年夜,以是要按期巴慢据库做建复,按期从头做索引,如许会提拔MongoDB 的不变性战服从。正在最新的版本里,它曾经正在完成正在线紧缩,估量该当正在2.0版阁下,该当可以完成正在线紧缩,能够正在背景施行如今repair DataBase 的一些操纵。假如那样,便处理了今朝搅扰我们的年夜成绩。4、MongoDB 对数据间的事件干系撑持比力强 5、运维没有便利

MongoDB 相对 MySQL 的劣势
  • 合适那些对数据库详细数据格局没有明白大概数据库数据格局常常变革的需供模子,并且对开辟者非常友爱。

  • 自带一个散布式文件体系,能够很便利天布置到效劳器机群擅埽MongoDB 里有一个Shard的观点,便识探便为了效劳器吩飕利用的。每增长一台Shard,MongoDB 的插进机能颐挥嗅以靠近倍数的方法增加,磁盘容量也很能够很便利天扩大。

  • 自带了对map-reduce运算框架的撑持,那也很便利停止数据的统计。相似于group by MongoDB 取 MySQL 号令比照 传统的干系数据库普通由数据库(database)、表(table)、记载(record)三个条理观点构成, MongoDB 是由数据库(database)、汇合(collection)、文档工具(document)三个条理构成。MongoDB 关于干系型数据库里的表,可是汇合中出有列、止战干系观点,那表现了形式自在的特性。




举报 使用道具

回复

评论 2

球球  vip终身会员  发表于 2020-12-22 19:20:08 | 显示全部楼层
路过

举报 使用道具

回复
久久的心  vip终身会员  发表于 2020-12-22 19:34:31 | 显示全部楼层
呵呵。。。

举报 使用道具

回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

0

关注

0

粉丝

138

主题
精彩推荐
热门资讯
网友晒图
图文推荐

Archiver|手机版|java学习基地 |网站地图

GMT+8, 2021-8-4 11:28 , Processed in 0.913027 second(s), 68 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.