MySQL与MongoDB都是开源的常用数据库,但是MySQL是传统的关系型数据库,MongoDB则是非关系型数据库(另称文档型数据库),是一种NoSQL的数据库。它们各有各的优点,关键是看用在什么地方。所以我们所熟知的那些SQL语句就不适用于MongoDB了,因为SQL语句是关系型数据库的标准语言。
关于 MongoDB,优点如下:
• MongoDB 的结构更灵活,因为它是一个文档型的 NoSQL 数据库,允许用户添加和删除数据库字段,而不必改变整个数据库结构;
• MongoDB 提供了高性能,无缝的扩展性和扩展性,可以很容易地横向扩展数据库,从而改善存储能力和处理能力;
• MongoDB 可以处理大量动态数据,因为文档可以包含不同类型的数据;
• MongoDB 支持高级功能,包括索引,聚合管道和分片,以提供强大的查询功能;
• MongoDB 支持一些新的特性,如内存限制,自动缓存,可插拔式存储引擎等;
• MongoDB 支持大量编程语言,这样能够更轻松地与现有代码集成;
当然,MongoDB 也有一些缺点,比如,它不能执行复杂的关系查询,缺乏一些高级的数据库特性,比如主从复制,事务等等。
相比之下,MySQL 的优点是:
• MySQL 支持原始 SQL 语句,支持复杂的查询,因此能够处理复杂的数据;
• MySQL 支持强大的回滚管理,这样可以避免不需要的或):错误的更改;
• MySQL 支持外部键,这样可以有效地关联两个表;
• MySQL 支持复杂的视图结构,可以从不同的表中提取数据;
• MySQL 拥有极佳的社区支持,有快速的解决方案;
• MySQL 轻便,拥有低延迟,因此可以处理大量数据;
但是,MySQL 也有一些缺点,它无法处理非关系型数据,它的数据结构也非常死板,对动态数据的处理也做得不够好。
接下来我们比较2个数据库的性能水平:
1. 百万、千万级别的下不同查询量不同并发量的压测结果
数据库表中记录数总量在百万、千万级别的压测数据及结果如表所示:
2. 亿级别的下不同查询量不同并发量的压测结果
数据库表中记录数总量在亿级别的压测数据及结果如表所示:
压测结果分析:
1)当每次查询数据量在500条时,无论表中数据总量千万或者亿级别,Mysql和MongoDB在100线程并发的情况下查询性能相当,表现良好,平均响应时间在500ms以内,TPS在230左右。
2)当每次查询数据量在5000条时,表中数据总量为千万级别时,MongoDB在50线程并发情况下查询性能不及Mysql 的一半,100线程并发情况查询性能都很差,平均响应时间在4500ms左右,表中数据总量为亿级别时,在50个及以上的并发情况下,MongoDB和Mysql性能都较差。
在本案例简单数据模型下的时间范围内的等值查询应用场景下,MongoDB在高并发条件下的大数据量查询性能并没有比Mysql更好。另外还有一点需要注意的是,在本案例中,数据总量由百万级别到千万级别再到亿级别的变化过程中,对于查询性能的影响都不是很大,但对于查询数据量的数倍增长却十分敏感,所以在考量数据库查询性能的时候,也要重点考量应用的单次查询量的需求。
所以具体使用Mysql还是MongoDB,需要根据自己的业务场景做出相应的选择。
附带Mysql和MongoDB的学习教程,有需要的同学可以去看看:
Mysql:我们身边有哪些数据库 - 数据库入门 - Mysql - 小牛知识库
Mongodb: NoSQL是什么 - MongoDB教程 - MongoDB - 小牛知识库