迅闻网
让更多人看到你

mongodb mysql性能比较(mongodb mysql查询速度)

mongodbmysql性能比较

常常看到有人讨论,mongodb功用不如MySQL,MySQL能不能代替之类的说法,其实作为技能人,很不喜爱哪个比哪个好这种说法,基本就是挑事,咱们今天一起
分别从规划思维、功用、安全性、扩展性、事务等几个方面,来做一下比较:
mongovsmysql
1.规划思维的不同
以订单为例,咱们看看两种数据库应该怎么规划
MySQL是这姿态的
订单表
mysqlorder表结构
订单概况
orderitem表结构
以订单号相关字段。
MongoDB是这姿态的
mongoorder结构
order_item作为订单的子元素,是一个全体;
在一对一,一对多的场景,特别合适用MongoDB的内嵌文档和数组来存储,读写功率都比较高。
一对多的场景则合适MySQL的表结构来存储。
你觉得那种存储的更合理呢?
2.功用
一般情况平等条件下,MongoDB会比MySQL快,主要原因如下:
a.Mongo运用的内存映射技能,写入数据时分只要在内存里完成就能够回来给应用程序,这样并发量自然就很高。而保存到硬体的操作则在后台异步完成。
b.MongoDB的规划要求你常用的数据(workingset)能够放到内存里。这样大部分操作只需要读内存,内存操作当然比较快,这也是MongoDB,常常会和redis比较的原因。条件就是要保证服务器有足够用的内存,不然功用会严重下降。
c.数据集中存放,减少读写时磁盘寻道的时间,这也是MongoDB的基本思维之一。
并发才能,详细看过有网友测验过,MongoDB和MySQL的并发才能,借鉴一下:
并发测验结果
可见,功用上并没有咱们想象的距离那么大,
我没有测验过,有爱好的网友能够测验一下
3.数据安全性
咱们常常看到新闻,MongoDB数据库被黑,被勒索的新闻,为什么呢?
原来MongoDB3.6版别之前,绑定的0.0.0.0的IP,即直接外网敞开,并且咱们知道MongoDB默许是没有暗码的,所以很多新手弄的服务器就是在裸奔,所以被黑就在所难免的,也不能全怪MongoDB。
经过一些装备,MongoDB仍是很安全的
a.绑定本机IP,限于局域网拜访;
b.装备防火墙,禁止外部拜访和端口探测;
c.设置合理的用户和分配权限。道理和MySQL相同,遵循最小权限的准则。
4.事务
早期的版别是没有事务的,由于在MongoDB中,关于单条记载的一个操作是原子性的,一般来说,MongoDB将有相关的数据存储在一起,所以很多操作不像MySQL,需要做多表的操作。
从4.0版别开始,MongoDB支撑副本集的事务,4.2支撑切片的事务;
关于多表事物的需求场景,MongoDB也是支撑的,能够在多个分片、库、表、文档之间完成分布式的事务。
分布式事务会严重影响功用,所以要谨慎运用,当需要事务时,优先考虑是否可经过合理运用MongoDB的内嵌文档和数组,下降运用事务的几率。
要了解MongoDB的事务,要先了解一下MongoDB的集群。
5.扩展性
随着互联网的开展,数据的量级也是撑指数的增长,从GB到TB到PB。对数据的各种操作也是愈加的困难,所以在做数据库选型时,扩展性是必须要考虑的目标:
MongoDB提供了shardedclusters(分片集群)和replicasets(副本集)两种集群形式
副本集:
架构图如下,意图是数据冗余和系统高可用,相似于MySQL的主从架构,每个节点的数据是一致的,主担任读写操作,从担任数据的备份,在需要的时分可转成主节点。
简单主从
如果需要做到故障主动转移,还需要增加一个推举节点,推举节点只担任在主节点出现问题时,把从节点推举为主节点。不担任数据存储。这个和redis的哨兵形式相似。
哨兵形式
关于主从的仿制是一个比较杂乱的进程,后面有时间再详细介绍。
分片集群:
分片是MongoDB提供的更高级的集群形式,经过分片,把数据分配到不同的机器上,每台机器只存储了部分的数据,经过mongos完成路由去拜访。
切片形式架构
这是MySQL没有的功用,相似于MySQL分库分表的功用,经过mycat+mysql完成
6.优势地点
MongoDB数据类型丰厚,查询功用强壮,还有文本查找功用和地舆空间计算,强壮的数据分析和计算才能。
缺点:
没有join,连表操作才能弱,所以在杂乱查询时,仍是联系型数据库更胜一筹。
7.阻隔等级
这是MySQL里的概念,在MongoDB事务提交前,事务外看不到本次修正的内容,阻隔等级相似MySQL默许的阻隔等级,“可重复读”的等级。
综上所述,总结一下。
什么时分合适用MongoDB:
1.数据结构不确定,可能发生改动的场景;
2.事务安全性要求不高,数据扩展要求较高的时分;
什么时分用MySQL:
1.有事务要求,强一致性要求较高,涉及到金钱的时分;
2.逻辑杂乱,有较多join的需求;
没有最好的,只要最合适的,合适自己事务的就是最好的!sql

mongodbmysql查询速度

在数据库寄存的数据中,有一种特殊的键值叫做主键,它用于专一地标识表中的某一条记载。也就是说,一个表不能有多个主键,而且主键不能为空值。
无论是MongoDB仍是MySQL,都存在着主键的定义。
关于MongoDB来说,其主键名叫”_id”,在生成数据的时分,如果用户不主动为其分配一个主键的话,MongoDB会主动为其生成一个随机分配的值。
在MySQL中,主键的指定是在MySQL刺进数据时指明PRIMARYKEY来定义的。当没有指定主键的时分,另一种东西——索引,相当于替代了主键的功能。索引可认为空,也能够有重复,别的有一种不允许重复的索引叫专一索引。如果既没有指定主键也没有指定索引的话,MySQL会主动为数据创立一个。
1.数据库的均匀刺进速率:MongoDB不指定_id刺进>MySQL不指定主键刺进>MySQL指定主键刺进>MongoDB指定_id刺进。
2.MongoDB在指定_id与不指定_id刺进时速度相差很大,而MySQL的差别却小很多。
分析:
1.在指定_id或主键时,两种数据库在刺进时要对索引值进行处理,并查找数据库中是否存在相同的键值,这会减慢刺进的速率。
2.在MongoDB中,指定索引刺进比不指定慢很多,这是由于,MongoDB里每一条数据的_id值都是仅有的。当在不指定_id刺进数据的时分,其_id是系统主动核算生成的。MongoDB通过核算机特征值、时刻、进程ID与随机数来确保生成的_id是仅有的。而在指定_id刺进时,MongoDB每插一条数据,都需求查看此_id可不可用,当数据库中数据条数太多的时分,这一步的查询开支会拖慢整个数据库的刺进速度。
3.MongoDB会充沛运用系统内存作为缓存,这是一种非常优秀的特性。咱们的测试机的内存有64G,在刺进时,MongoDB会尽或许地在内存快写不进去数据之后,再将数据耐久化保存到硬盘上。这也是在不指定_id刺进的时分,MongoDB的效率遥遥领先的原因。但在指定_id刺进时,当数据量一大内存装不下时,MongoDB就需求将磁盘中的信息读取到内存中来查重,这样一来其刺进效率反而慢了。
4.MySQL不愧是一种非常稳定的数据库,无论在指定主键仍是在不指定主键刺进的情况下,其效率都差不了太多。

未经允许不得转载:迅闻网 » mongodb mysql性能比较(mongodb mysql查询速度)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

迅闻网-让更多人看到你

登录/注册返回首页