发布信息

mongodb和mysql哪个难 (mongodb数据库)

     2024-10-22 20:18:14     760

本文目录导航:

mongodb和mysql哪个难

MongoDB自身它还算比拟年轻的一个产品,所以它的疑问,就是成熟度必需没有传统MySQL那么成熟稳固。瑭锦Tanjurd倡导在经常使用的时刻,

第一,尽量经常使用稳固版,不要在线上经常使用开发版,这是一个大准则;

另外一点,备份很关键,MongoDB假设出现一些异常状况,备份必定是要能跟上。

除了经过传统的复制的形式来做备份,离线备份也还是要有,不论你是用什么形式,都要有一个完整的离线备份。

往往最后出现了不凡状况,它能协助到你;

另外,MongoDB性能的一个关键点就是索引,索引是不是能有比拟好的经常使用效率,索引是不是能够放在内存中,这样能够优化随机读写的性能。

假设你的索引不能齐全放在内存中,一旦出现随机读写比拟高的时刻,它就会频繁地启动磁盘替换,这个时刻,MongoDB的性能就会急剧降低,会出现动摇。

另外,MongoDB还有一个最大的缺陷,就是它占用的空间很大,由于它属于典型空间换期间准则的类型。那么它的磁盘空间比个别数据库会糜费一些,而且到目前为止它还没有实如今线紧缩性能,在MongoDB中频繁的启动数据增删改时,假设记载变了,例如数据大小出现了变动,这时刻容易发生一些数据碎片,出现碎片引发的结果,一个是索引会出现性能疑问,

另外一个就是在必定的期间后,所占空间会莫名其妙地增大,所以要活期把数据库做修复,活期从新做索引,这样会优化MongoDB的稳固性和效率。

在最新的版本里,它曾经在实如今线紧缩,预计应该在2.0版左右,应该能够实如今线紧缩,可以在后盾口头如今repair>mongodb实用于什么场景

MongoDB实用于须要处置少量数据,特意是无结构或半结构化数据的场景,同时须要高性能和水平裁减才干的运行场景。

1. 处置少量数据:MongoDB是一个面向文档的数据库,驳回BSON(二进制JSON)格局存储数据。

这种格局使得MongoDB能够灵敏、高效地存储少量数据。

此外,MongoDB支持分片,可以将数据扩散到多个主机,以成功数据的水平裁减。

因此,关于须要处置少量数据的运行,如大数据、日志处置等,MongoDB是一个很好的选用。

2. 无结构或半结构化数据:MongoDB的面向文档的特性使得它十分适宜存储无结构或半结构化数据。

例如,社交媒体数据、物联网数据等,这些数据的结构经常变动,而且很难用传统的相关型数据库来存储。

MongoDB的灵敏的数据模型可以轻松地应答这种变动。

3. 高性能:MongoDB支持索引,可以提供高性能的数据查问。

此外,MongoDB还支持聚合操作,可以在数据库端口头复杂的数据处置义务,从而缩小了网络传输的开支,提高了性能。

因此,关于须要高性能的运行,照实时剖析、在线游戏等,MongoDB也是一个不错的选用。

4. 水平裁减才干:MongoDB的分片性能不只可以用来存储少量数据,还可以提高数据库的读写性能。

由于分片可以将数据扩散到多个主机,从而充沛应用了主机的并行处置才干。

此外,MongoDB还提供了智能分片的性能,可以智能将数据迁徙到新的主机,从而简化了水平裁减的操作。

因此,关于须要水平裁减才干的运行,如云计算、移动运行后端等,MongoDB也是一个很好的选用。

例子:例如,一个社交媒体平台或许须要存储每个用户的帖子、评论、点赞等消息。

这些消息是无结构的,由于每个用户的消息或许都不同,而且或许会随时变动。

此外,社交媒体平台也须要处置少量数据,并须要提供高性能的查问和实时剖析性能。

因此,MongoDB或许是一个十分适宜这种运行的数据库。

MongoDB 是什么?看完你就知道了

点击上方 蓝色字体 ,选用“置顶群众号”

优质文章,第一期间送达

链接 | /hayre/article/details/

是什么?用一句话总结

MongoDB是一款为web运行程序和互联网基础设备设计的数据库治理系统。

没错MongoDB就是数据库,是NoSQL类型的数据库。

(1)MongoDB提出的是文档、汇合的概念,经常使用BSON(类JSON)作为其数据模型结构,其结构是面向对象的而不是二维表,存储一个用户在MongoDB中是这样子的。

经常使用这样的数据模型,使得MongoDB能在消费环境中提供高读写的才干,吞吐量较于mysql等SQL数据库大大增强。

(2)易伸缩,智能缺点转移。

易伸缩指的是提供了分片才干,能对数据集启动分片,数据的存储压力摊派给多台主机。

智能缺点转移是正本集的概念,MongoDB能检测主节点能否存活,当失活时能智能优化从节点为主节点,到达缺点转移。

(3)数据模型由于是面向对象的,所以可以示意丰盛的、有层级的数据结构,比如博客系统中能把“评论”间接怼到“文章“的文档中,而不用像myqsl一样创立三张表来形容这样的相关。

3.关键特性

(1)文档数据类型

SQL类型的数据库是正轨化的,可以经过主键或许外键的解放保证数据的完整性与惟一性,所以SQL类型的数据库罕用于对数据完整性较高的系统。

MongoDB在这一方面是不如SQL类型的数据库,且MongoDB没有固定的Schema,正由于MongoDB少了一些这样的解放条件,可以让数据的存储数据结构更灵敏,存储速度愈放慢。

(2)即时查问才干

MongoDB保管了相关型数据库即时查问的才干,保管了索引(底层是基于B tree)的才干。

这一点吸取了相关型数据库的好处,相比于同类型的NoSQL redis 并没有上述的才干。

(3)复制才干

MongoDB自身提供了正本集能将数据散布在多台机器上成功冗余,目标是可以提供智能缺点转移、裁减读才干。 (4)速度与耐久性

MongoDB的驱动成功一个写入语义 fire and forget ,即经过驱动调用写入时,可以立刻失掉前往失掉成功的结果(即使是报错),这样让写入的速度愈放慢,当然会有必定的不安保性,齐全依赖网络。

MongoDB提供了Journaling日志的概念,实践上像mysql的bin-log日志,当须要拔出的时刻会先来日志外面写入记载,再成功实践的数据操作,这样假设出现停电,进程突然终止的状况,可以保证数据不会失误,可以经过修复性能读取Journaling日志启动修复。

(5)数据裁减

MongoDB经常使用分片技术对数据启动裁减,MongoDB能智能分片、智能转移分片外面的数据块,让每一个主机外面存储的数据都是一样大小。

MongoDB外围主机关键是经过mongod程序启动的,而且在启动时不需对MongoDB经常使用的内存启动性能,由于其设计哲学是内存治理最好是交给操作系统,缺少内存性能是MongoDB的设计亮点,另外,还可经过mongos路由主机经常使用分片性能。

MongoDB的关键客户端是可以交互的js shell 经过mongo启动,经常使用js shell能经常使用js间接与MongoDB启动交流,像经常使用sql语句查问mysql数据一样经常使用js语法查问MongoDB的数据,另外还提供了各种言语的驱动包,繁难各种言语的接入。

mongodump和mongorestore,备份和恢双数据库的规范工具。

输入BSON格局,迁徙数据库。

mongoexport和mongoimport,用来导入导出JSON、CSV和TSV数据,数据须要支持多格局时有用。

mongoimport还能用与大数据集的初始导入,然而在导入前顺便还要留意一下,为了能充沛应用好mongoDB理论须要对数据模型做一些调整。

mongosniff,网络嗅探工具,用来观察发送到数据库的操作。

基本就是把网络上行输的BSON转换为易于人们浏览的shell语句。

因此,可以总结失掉,MongoDB结合键值存储和相关数据库的最好特性。

由于繁难,所以数据极快,而且相对容易伸缩还提供复杂查问机制的数据库。

MongoDB须要跑在64位的主机上方,且最好独自部署,由于是数据库,所以也须要对其启动热备、冷备处置。

由于本篇文章不是API手册,一切这里对shell的经常使用也是基础的引见什么性能可以用什么语句,关键是为了展现经常使用MongoDB shell的繁难性,假设须要知道详细的MongoDB shell语法可以查阅官网文档。

创立数据库并不是必需的操作,数据库与汇合只要在第一次性拔出文档时才会被创立,与对数据的灵活处置形式是分歧的。

简化并减速开发环节,而且无利于灵活调配命名空间。

假设担忧数据库或汇合被异常创立,可以开启严厉形式。

以上的命令只是繁难实例,假定假设你之前没有学习过任何数据库语法,同时开局学sql查问语法和MongoDB 查问语法,你会发现哪一个更繁难呢?假设你经常使用的是java驱动去操作MongoDB,你会发现任何的查问都像Hibernate提供出来的查问形式一样,只需构建好一个查问条件对象,便能轻松查问(接上去会给出示例),博主之前相熟ES6,所以入手MongoDB js shell成功没疑问,也正由于这样繁复,完善的查问机制,深深的爱上了MongoDB。

经常使用java驱动链接MongoDB是一件十分繁难的事件,繁难的援用,繁难的做增删改查。

在经常使用完java驱动后我才发现spring 对MongoDB 的封装还不如官网自身提供出来的物品好用,上方繁难的展现一下经常使用。

这里只举例了繁难的链接与繁难的MongoDB操作,可见其操作的容易性。

经常使用驱动时是基于TCP套接字与MongoDB启动通讯的,假设查问结果较多,恰恰不可所有放进第一主机中,将会向主机发送一个getmore指令失掉下一批查问结果。

拔出数据到主机期间,不会期待主机的照应,驱动会假定写入是成功的,实践是经常使用客户端生成对象id,然而该行为可以经过性能性能,可以经过安保形式开启,安保形式可以校验主机端拔出的失误。

要分明了解MongoDB的基本数据单元。

在相关型数据库中有带列和行的数据表。

而MongoDB数据的基本单元是BSON文档,在键值中有指向不定类型值的键,MongoDB领有即时查问,但不支持结合操作,繁难的键值存储只能依据单个键来失掉值,不支持事务,但支持多种原子升级操作。

如读写比是怎么的,须要何种查问,数据是如何升级的,会不会存在什么并发疑问,数据结构化的水平是要求高还是低。

系统自身的需求选择mysql还是MongoDB。

在关于schema 的设计中要留意一些准则,比如:

数据库是汇合的逻辑与物理分组,MongoDB没有提供创立数据库的语法,只要在拔出汇合时,数据库才开局建设。

创立数据库后会在磁盘调配一组数据文件,一切汇合、索引和数据库的其余元数据都保管在这些文件中,查阅数据库经常使用磁盘形态可经过。

汇合是结构上或概念上相似得文档的容器,汇合的称号可以蕴含数字、字母或 . 符号,但必需以字母或数字扫尾,齐全。

限定汇合名不能超越128个字符,实践上 . 符号在汇合中很有用,能提供某种虚构命名空间,这是一种组织上的准则,和其余汇合是一视同仁的。

在汇合中可以经常使用。

其次是键值,在MongoDB外面一切的字符串都是UTF-8类型。

数字类型包括double、int、long。

日期类型都是UTC格局,所以在MongoDB外面看到的期间会比北京期间慢8小时。

整个文档大小会限度在16m以内,由于这样可以防止创立美观的数据类型,且小文档可以优化性能,批量拔出文档理想数字范畴是10~200,大小不能超越16MB。

(2)解析查问时MongoDB经过最优方案选用一个索引启动查问,当没有最适宜索引时,会先不同的经常使用各个索引启动查问,最终选出一个最优索引做查问

(3)假设有一个a-b的复合索引,那么仅针对a的索引是冗余的

(4)复合索引里的键的顺序是很关键的

(2)复合索引

(3)惟一性索引

(4)稠密索引

如索引的字段会出现的值,或是少量文档都不蕴含被索引的键。

假设数据集很大时,构建索引将会破费很长的期间,且会影响程序性能,可经过

当经常使用 mongorestore 时会从新构建索引。当曾经口头过大规模的删除时,可经常使用

mongodb和mysql哪个难

对索引启动紧缩,重建。

(1)查阅慢查问日志

(2)剖析慢查问

留意新版本的MongoDB 的explain方法是须要参数的,不然只显示个别的消息。

本节雷同关键繁难出现MongoDB正本集搭建的繁难性,与正本集的强健性,监控容易性

提供主从复制才干,热备才干,缺点转移才干

实践上MongoDB对正本集的操作跟mysql主从操作是差不多的,先看一下mysql的主从数据流动环节

而MongoDB关键依赖的日志文件是oplog

写操作先被记载上去,参与到主节点的oplog里。

与此同时,一切从结点复制oplog。

首先,检查自己oplog里最后一条的期间戳;其次,查问主节点oplog里一切大于此期间戳的条目;最后,把那些条目参与到自己的oplog里并运行到自己的库里。

从节点经常使用长轮询立刻运行来自主结点oplog的新条目。

当遇到以上状况,从节点会中止复制

local数据库保管了一切正本集元素据和oplog日志

可以经常使用以下命令检查复制状况

每个正本集成员每秒钟ping一次性其余一切成员,可以经过看到节点上次的心跳检测期间戳和 肥壮 状况。

这个点没必要过多形容,然而有一个不凡场景,假设从节点和仲裁节点都被杀了,只剩下主节点,他会把自己升级成为从节点。

假设主节点的数据还没有写到从库,那么数据不能算提交,当该主节点变成从节点时,便会触发回滚,那些没写到从库的数据将会被删除,可以经过rollback子目录中的BSON文件恢复回滚的内容。

只能链接到主节点,假设链接到从节点的话,会被拒绝写入操作,然而假设没有经常使用安保形式,由于mongo的fire and forget 特性,会把拒绝写入的异常给吃掉。

(2)经常使用正本集形式链接

能依据写入的状况智能启动缺点转移,然而当正本集启动新的选举时,还是会出现缺点,假设不经常使用安保形式,照旧会出现写不出来,但事实成功的状况。

分片是数据库切分的一个概念成功,这里也是繁难总结为什么要经常使用分片以及分片的原理,操作。

当数据量过大,索引和上班数据集占用的内存就会越来越多,所以须要经过火片负载来处置这个疑问

(2)分片的外围操作

分片一个汇合:分片是依据一个属性的范畴启动划分的,MongoDB经常使用所谓的分片键让每个文档在这些范畴里找到自己的位置

块:是位于一个分片中的一段延续的分片键范畴,可以了解为若干个块组成分片,分片组成MongoDB的所有数据

(3)拆分与迁徙

块的拆分:初始化时只要一个块,到达最大块尺寸64MB或个文档就会触发块的拆分。

把原来的范畴一分为二,这样就有了两个块,每个块都有相反数量的文档。

迁徙:当分片中的数据大小不一时会发生迁徙的举措,比如分片A的数据比拟多,会将分片A外面的一些块转移到分片B外面去。

分片集群经过在分片中移动块来成功平衡,是由名为平衡器的软件进程治理的,义务是确保数据在各个分片中坚持平均散布,当集群中领有块最多的分片与领有块起码分片的块差大于8时,平衡器就会动员一次性平衡处置。

启动两个正本集、三特性能主机、一个mongos进程

性能分片

(2)索引

分片汇合只准许在_id字段和分片键上参与惟一性索引,其余中央不行,由于这须要在分片间启动通讯,实施起来很复杂。

当创立分片时,会依据分片键创立一个索引。

(2)低效的分片键

(3)理想的分片键

依据不同的数据中心划分

(2)最低要求

(3)性能的留意事项

须要预计集群大小,可经常使用以下命令对现有汇合启动分片处置

(4)备份分片集群

备份分片时须要中止平衡器

经常使用64位机器、32位机器会制约mongodb的内存,使其最大值为1.5GB

(2)cpu mongodb 只要当索引和上班集都可放入内存时,才会遇到CPU瓶颈,CPU在mongodb经常使用中的作用是用来检索数据,假设看到CPU经常使用饱和的状况,可以经过查问慢查问日志,排查是不是查问的疑问造成的,假设是可以经过参与索引来处置疑问

mongodb写入数据时会经常使用到CPU,然而mongodb写入期间一次性只用到一个核,假设有频繁的写入行为,可以经过火片来处置这个疑问 (3)内存

大内存是mongodb的保证,假设上班集大小超越内存,将会造成性能降低,由于这将会参与数据加载入内存的举措

(4)硬盘

mongodb自动每60s会与磁盘强迫同步一次性,称为后盾刷新,会发生I/O操作。在重启时mongodb会将磁盘外面的数据加载至内存,高速磁盘将会缩小同步的期间

(5)文件系统

经常使用ext4 和 xfs 文件系统

禁用最后访问期间

(6)文件形容符

linux 自动文件形容符是1024,须要大额度的优化这个额度

(7)时钟

mongodb各个节点主机之间经常使用ntp主机

启动时经常使用 - -bind_ip 命令

(2)身份验证

启动时经常使用 - -auth 命令

(3)正本集身份认证

经常使用keyFile,留意keyFile文件的权限必需是600,不然会启动不起来

搭建正本集至少须要两个节点,其中仲裁结点不须要有自己的主机

(2)Journaling日志 写数据时会先写入日志,而此时的数据也不是间接写入硬盘,而是写入内存

然而Journaling日志会消耗内存,所以可以在主库上方封锁,在从库上方启动

可以独自为Journaling日志经常使用一块固态硬盘

在拔出时,可以经过驱动确保Journaling拔出后再反应,然而会十分影响性能。

-vvvvv 选项(v越多,输入越详细)

({logrotare:1}) 开启滚动日志

灵活展现mongodb优惠数据

占用以后mongodb监听端口往上1000号的端口

把数据库内容导出成BSON文件,而mongorestore能读取并恢复这些文件

(2)mongorestore

把导出的BSON文件恢复到数据库

(3)备份原始数据文件 可以这么做,然而,操作之前须要启动锁库处置 ({fsync:1,lock:true})db.$ 恳求解锁操作,然而数据库不会立刻解锁,须要经常使用 验证。

({repairDatabase:1}) 修复单个数据库

修复就是依据Jourling文件读取和重写一切数据文件偏重建各个索引 (2)压紧

压紧,会重写数据文件,偏重建汇合的所有索引,须要停机或许在从库上方运转,假设须要在主库上方运转,须要参与force参数 保证加写锁。

(2)为优化性能审核索引和查问

总的来说,扫描尽或许少的文档。

保证没有冗余的索引,冗余的索引会占用磁盘空间、消耗更多的内存,在每次写入时还需做更多上班

(3)参与内存

dataSize 数据大小 和 indexSize 索引大小,假设两者的和大于内存,那么将会影响性能。

storageSize超越dataSize 数据大小 两倍以上,就会因磁盘碎片而影响性能,须要紧缩。

相关内容 查看全部