MongoDB4和MysSQL5.7的读/写和事务处理速度简单对比
系统环境: Ubuntu 18.04
数据库 MysSQL5.7/MongoDB4.0
插入的数据为随机生产,不重复.
MySQL使用的连接库是 sqlalchemy
MongoDB使用的连接库是pymongo
测试分三个部分
- 写入测试
- 查询测试
- 事务测试
MysSQL 5.7 VS MOngoDB 4.0
插入测试
表很简单.只有一个sn字符串的字段.和一个_id.
_id作为主键都是由数据库自行生成的.
mysql表使用的是InnoDB引擎.字符集utf-8
mysql和mongodb都使用批量插入的方法,插入2万条数据.
两者都是有连接池的.
mongodb (w0)分组插入2万条记录耗时 1.798202秒
mongodb (w1)分组插入2万条记录耗时 2.229613秒
mongodb (w:majority)分组插入2万条记录耗时 3.3718秒
mongodb (w1, j1)分组插入2万条记录耗时 3.332055秒
mongodb (w:majority, j1)分组插入2万条记录耗时 3.594414秒
mysql 分组插入2万条记录耗时 33.024626秒
对写测试结果稍微做一下说明:
w和j是mongodb的写关注选项.w0,w1....之类的分别代表写关注处于不同的模式(写关注可以理解为mongodb对写入数据的可靠用使用何种确认方式?).
- mongodb w0模式 只要网络和硬件没故障,写函数没报错.就认为正确的写入了.这是性能损失最少的工作模式.早期的mongodb默认就是这种模式.这也给了某些人说mongodb会丢数据的口实.虽然这是使用者自己设置不当导致的.但至少这恶名是传开了.哈哈
- mongodb w1模式 这是现在的mongodb的默认模式.会确认写函数正确返回才会认为是写入数据了.这种情况下.当系统处于失去响应的状态或者将要宕机时还是会丢失数据.不过这个模式已经很可靠了.
- mongodb w:majority模式 当集群中的超过半数的主机写入函数都正确返回才会认为是写入数据了.
- mongodb w1 j1模式 在w1的基础上, 还要确认日志完整写入了才会认为是写入数据了.会占用额外的空间.这是单机状态下最高的安全性了.可以认为这个写关注的程度基本上和mysql的正常工作模式类似.
- mongodb w:majority, j1 当集群中的超过半数的主机写入函数都正确返回,并且日志都完整记录了.才认为是写入数据了.这是mongodb工作时的最高安全模式.一般认为这种模式只会在硬件故障时才有丢失数据的可能.
- mysql 分组插入是批量插入的意思. 如果模拟实际中的单条数据插入.这个结果估计要后面加个0,还好.那不在本次测试范围之类.
插入测试结果:可以看到,我们即使让mongodb工作在和mysql类似的工作模式下.mongodb还是有着10倍左右的写入速度上的优势.这和其他人的测试结果基本吻合(mongodb的写入速度比mysql高一个数量级)
查询测试
查询测试使用的是同一张表:
表中只有一个字段sn. 没有索引.使用一个数据库不存在的sn进行条件查询以便让数据库遍历所有的记录.
测试的结果如下:
mongodb 1万次查询记录耗时 17.88544秒
mysql 1万次查询记录耗时 86.453012秒
可以看出来,查询的速度差别没写入那么大.(大约是5倍上下的速度差距)
事务测试
事务能力测试的需要至少2张表. 在对第一张表操作后,接着操作第二张表.操作过程中涉及的查询不使用索引.
mongodb 1000次事物操作耗时 5.91422秒
mysql 1000次事物操作耗时 42.471786秒
双方的事务操作速度大概是7倍的差距.
本来还是打算做一个连接(join)查询的测试.不过估计结果也不会有什么太大的改变.就是打住吧.
总结
目前来看,至少在速度上,MongoDB是让MySQL在后面吃灰. 功能上,以前没有的连接查询和事务都已经完美的支持了.如果是没有历史包袱的新项目的话,还是很推荐大家使用MongoDB的.
MysSQL 5.7 VS MOngoDB 4.0
- 功能上,股让MongoDB提供的功能异常强大.瞅瞅MongoDB的API上那让人眼花缭乱的查询函数.各种函数的嵌套和组合.还有内置javascript支持(可以使用js函数组合出你想要的查询和过滤条件),aggregate和map-reduce.虽然提供了几乎你能想到的各种查询.不好的消息是学习成本跟MySQL相比大幅度上升.对于新手来说,那汗牛充栋的文档数量让人望而却步.学习成本比MySQL不是高一星半点.
- 速度上, 这个毋庸置疑.MongoDB在查询写入事务等方面的速度快的那都是一骑绝尘.
- 稳定性上,这几个测试根本无法对两者的稳定性上作出对比.不过以笔者20多年的工作经验来看,现在的MongoDB的稳定性满足商业运作已经完全没问题了.只是对于更多的人来说.MongoDB需要更多的时间来证明自己的稳定性不输自己的那些老前辈.
MongoDB4和MysSQL5.7的读/写和事务处理速度简单对比的更多相关文章
- Pandas 基础(4) - 读/写 Excel 和 CSV 文件
这一节将分别介绍读/写 Excel 和 CSV 文件的各种方式: - 读入 CSV 文件 首先是准备一个 csv 文件, 这里我用的是 stock_data.csv, 文件我已上传, 大家可以直接下载 ...
- MyISAM Key Buffer 读/写/利用率(%) MylSAM平均每秒Key Buffer利用率(%) MylSAM平均每秒Key Buffer读命中率(%) MylSAM平均每秒Key Buffer写命中率(%)
MyISAM Key Buffer 读/写/利用率(%) MylSAM平均每秒Key Buffer利用率(%)MylSAM平均每秒Key Buffer读命中率(%)MylSAM平均每秒Key Buff ...
- openpyxl -用于读/写Excel 2010 XLSX/XLSM文件的python库
openpyxl -用于读/写Excel 2010 XLSX/XLSM文件的python库¶ https://www.osgeo.cn/openpyxl/index.html
- Windows操作系统中的I/O(读/写 输入/输出)
导言 写一个Windows平台下的应用程序大多时候都是离不开读写文件,网络通信的. 比如一个服务应用程序来说,它可能从网络适配器接受用户的请求,对请求进行处理计算,最终将用户端所需的数据返回,中间可能 ...
- java读/写文件
读取文件参考:https://blog.csdn.net/weixin_42129373/article/details/82154471 写入文件参考:https://blog.csdn.net/B ...
- 使用 FIO 对 Kubernetes 持久卷进行 Benchmark:读/写(IOPS)、带宽(MB/s)和延迟
工具 Dbench https://github.com/leeliu/dbench 用法 编辑 dbench.yaml 文件中的 storageClassName 以匹配你自己的 Storage C ...
- 极客时间 mysql实战45讲下载读 08讲事务到底是隔离的还是不隔离的 笔记
笔记体会: 1.innodb支持RC和RR隔离级别实现是用的一致性视图(consistent read view) 2.事务在启动时会拍一个快照,这个快照是基于整个库的.基于整个库的意思就是说一个事务 ...
- 一文彻底读懂MySQL事务的四大隔离级别
前言 之前分析一个死锁问题,发现自己对数据库隔离级别理解还不够清楚,所以趁着这几天假期,整理一下MySQL事务的四大隔离级别相关知识,希望对大家有帮助~ 事务 什么是事务? 事务,由一个有限的数据库操 ...
- EF架构~关系表插入应该写在事务里,但不应该是分布式事务
回到目录 这个标题很有意思,关系表插入,就是说主表和外表键在插入时,可能会有同步插的情况,如在建立主表时,扩展表需要同步完成数据的初始化工作,而对于多表插入时,我们为了保证数据的一致性会针它写在事务中 ...
随机推荐
- Docker 构建私有镜像仓库
在使用Docker一段时间后,往往会发现手头积累了大量的自定义镜像文件,这些文件通过公有仓库进行管理并不方便,另外有时候只是希望在内部用户之间进行分享,不希望暴露出去.这种情况下,就有必要搭建一个本地 ...
- IntelliJ IDEA setup JDK无效
参考 问题现象:功能全部爆红,总是提示“setup JDK”,设置JDK后无效.但程序能够正常编译和运行. 解决方法: File -> Invalidate Caches/Restart -& ...
- Spring Boot全局支持CORS(跨源请求)
import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet. ...
- Linux(16):Shell编程(3)
vim 编程环境配置: .vimrc 文件配置如下:(.vimrc文件放到家目录下:/root :然后退出 xshell 再登陆进来xshell) set nocompatible set histo ...
- 简化SpringMVC配置
映射器处理器和适配器是可以省略的 为什么可以省略?因为有默认配置 SpringMVC的默认配置
- 关于解决SpringDataJpa框架实体类表字段创建顺序与数据库表字段展示顺序不一致的问题
今天在公司的项目开发中,遇到一个问题: 后端对象实体类中写入字段顺序与数据库中的存储顺序不一致. 仔细观察到数据库中的表字段的排序方式是按照拼音字母的顺序abcdef......来存储的 而我的实体类 ...
- dubbo学习笔记三(全注解)
完全用注解替换掉之前的部分配置文件 项目结构 下面给出服务的的部分代码 [DubboConfiguration] @Configuration @EnableDubbo(scanBasePackage ...
- 设置VMware 以及指定 虚拟机 ,开机自启动
进入开机自启动目录 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp 重命名为 start.bat 编辑 这个文件,编辑之后Ct ...
- Linux系统下C语言获取Time
获取时间的函数有很多,具体包括如下: time()/gettimeofday()等等,下面是获取具体到usecond的时间程序: #include <iostream> #include ...
- 浙大数据结构课后习题 练习二 7-2 Reversing Linked List (25 分)
Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elem ...