前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >数据库评测报告第二期:MongoDB-3.2

数据库评测报告第二期:MongoDB-3.2

原创
作者头像
迪B哥
修改于 2017-08-16 06:47:31
修改于 2017-08-16 06:47:31
2.8K0
举报
文章被收录于专栏:MySQL实战分享MySQL实战分享

一、什么是MongoDB?

MongoDB是一个开源的,基于分布式的,面向文档存储的非关系型数据库,使用JSON风格来存储数据。其也是非关系型数据库当中功能最丰富、最像关系数据库的。MongoDB由C++编写,其名字来源于"Humongous"这个单词,其宗旨在于处理大量数据。

MongoDB作为如今新兴的Web框架---MEAN架构(MongoDB + Express +AngularJS + NodeJS)的重要组成部分,其如今的发展势头大有与传统Web框架(LAMP、LNMP)抢占市场主流框架的趋势。

MongoDB具有如下优势:

  • 支持的数据结构非常松散,可存储复杂的数据类型;
  • 支持多种操作系统上,提供多种编程语言的驱动程序;
  • 支持的多种数据类型;
  • 支持的查询语言非常强大;
  • 弱一致性,更能保证用户的访问速度;
  • 内置GridFS,支持大容量的存储;
  • 内置Sharding;
  • 文档结构的存储方式,能够更便捷的获取数据;
  • Wired Tiger引擎的使用,使得局部锁成为可能(新)
  • Wired Tiger引擎的使用,对数据进行压缩,减少了大量空间占用(新)

看到MongoDB如此特性和优势,不免勾起了我们的好奇心。这一期的评测报告就着重针对MongoDB的读写性能的进行测试和分析,一起来揭秘一下如今MongoDB在市场上如此被推崇的原因。

二、MongoDB的性能如何?

1、Insert性能

  • MongoDB的Insert性能随着线程数(小于128)的增加而增加,当大于128时,Insert性能开始逐渐出现明显波动和下降;
  • 当线程数量达到128时,MongoDB的Insert性能达到峰值,约为19万
  • 平均延迟随线程数量的增加而增加,且增加速度越来越快;

2、Read / Update性能 VS 线程数

① 百万级数据量(500万)

  • 对百万级数据的操作,MongoDB读性能优于写性能,随着写的比重增加,吞吐率明显减少,且系统延迟明显增加;
  • 只读、读多写少、读写混合、读少写多,这四个场景均在线程数达到128时达到峰值,分别约为23万、20万、16万、14万
  • 随着线程数的增加,写比重越大,其吞吐率波动性越大,越不稳定,且当线程数高于128时,吞吐率下降越明显,系统延迟增加越明显(即MongoDB读操作在数据量较少时稳定性更强);
  • 对百万级数据的操作,当写比重超过50%时,吞吐率出现明显下降,且随线程数增加而越发明显。

② 千万级数据量(3000万)

  • 对千万级数据的操作,MongoDB读性能优于写性能,随着写的比重增加,吞吐率明显减少,且系统延迟明显增加;
  • 只读、读多写少、读写混合、读少写多,这四个场景均在线程数达到128时达到峰值,分别约为17万、12万、7万、4万
  • 读写吞吐率均在线程数由1增加到64时,增长率最高。

③ 亿级数据量(1亿)

  • 对亿级数据的操作,MongoDB读性能优于写性能,随着写的比重增加,吞吐率明显减少,且系统延迟明显增加;
  • 只读、读多写少、读写混合、读少写多,这四个场景均在线程数达到64时达到峰值,分别约为7万、4万、2.5万、2万
  • 对亿级数据的操作,当写比重稍微增加,吞吐率直线下滑,并随线程数增加而越发明显;
  • 当线程数高于64时,四个场景的吞吐率均出现明显下降。

3、Read / Update性能 VS 数据规模

①吞吐率

  • 随着数据量的增加(百万级、千万级、亿级),MongoDB的读写吞吐率均下降;
  • 在数据量达到亿级时,MongoDB读操作的吞吐率还能维持在较高的水平。

②系统延迟

  • 随着数据量的增加(百万级、千万级、亿级),MongoDB的读写延迟明显增加;
  • 写操作是造成系统延迟的主要因素,并且随着数据量和写比重的增加,造成的延迟增加的影响会逐渐放大。

三、MongoDB的使用建议?

通过以上测试数据和分析说明,给出如下结论:

  • MongoDB读性能优于写性能(吞吐率、稳定性);
  • MongoDB在TS90上的针对中小数据量的读写,以128线程为最优,对于大数据量的读写,以64线程为最优;
  • MongoDB写操作对整体吞吐率的影响,随着数据量的增加而越发明显;
  • 写操作比读操作更容易造成系统延迟,并且随着数据量的增大,造成的影响越发明显;
  • 单个集合达到亿级数据量时,MongoDB的读写性能均有明显下降,设计集合时,应尽量将集合的文档数量控制在亿级以下。

【数据库评测报告】第二期:MongoDB的主要内容就是以上这些了(本测试只是针对小规模大数据进行了压力测试,对于大文件的测试以及在集群环境中的性能测试还在酝酿当中),测试在进行过程中由于网络条件、数据库配置等因素的影响,可能无法发挥出TS90机器的最大性能,但在一定程度上对于数据库选型具有参考价值。还想了解测试的参数和细节的朋友可以继续往下读。

四、环境配置包括哪些?

1、硬件环境

设备型号

配置描述

CPU型号

TS90

2个12核CPU,256G内存,12*800G SSD,万兆网卡

E5-2670v3

2、软件环境

(1)数据库版本

测设设备

数据库版本

TS90

MongoDB-3.2

3、测试细节

(1)测试工具

所谓工欲善其事,必先利其器,对于测试工具的选择会直接对测试的结果产生较大影响,一个好的测试首要要解决的必然是选择哪款测试工具。本次测试采用的测试工具是YCSB,肯定很多人会问,为什么NoSQL测试工具那么多,为什么会选择YCSB呢?这款性能测试工具的轻量级设计、多兼容性、支持多场景和多线程等特性都足够碾压其他测试工具的,最重要的是MongoDB官方测试所采用的工具就是YCSB。下面详细给大家介绍一下这款工具的原理和优势。

YCSB是Yahoo开发的一个专门用来对新一代数据库进行基准测试的工具。全名是Yahoo! Cloud Serving Benchmar。上图是YCSB的结构,可以看成是一个数据库客户端。暗色的模块是可以替换的,Workload Executor是产生应用负载的,DB Interface Layer是将特定数据库的API转为YCSB的API,用户可以自定义负载和数据库

YCSB的包括以下几大特性:

  • 支持常见的数据库读写操作,如插入,修改,删除及读取;
  • 多线程支持,YCSB用Java实现,有很好的多线程支持;
  • 灵活定义场景文件,可以通过参数灵活的指定测试场景;
  • 数据请求分布方式多样,支持随机、Zipfian以及其他请求分布方式;
  • 可扩展性强,可通过扩展Workload的方式来修改或者扩展YCSB的功能。

(2)测试流程

①建立测试数据库database;

②在数据库中建立结构相同的3个测试集合(Test_20、Test_80、Test_300);

③利用YCSB的S1场景向测试集合中分别插入一定数量的文档(500万、3000万、1亿);

④利用YCSB的S2~S5场景分别在3个测试集合上进行多线程测试;

⑤结果数据的分析。

(3)测试场景

场景名

场景介绍

场景配置

S1

插入(100% insert)

insertproportion=1

S2

多读少写(90% read/10% update)

readproportion=0.9 updateproportion=0.1

S3

读写均衡(50% read/50% update)

readproportion=0.5 updateproportion=0.5

S4

多写少读(10% read/90% update)

readproportion=0.1 updateproportion=0.9

S5

只读 (100% read)

readproportion=1

(4)测试表结构

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
磊哥评测之数据库:腾讯云MongoDB vs自建
上期文章我们聊到了redis。这期我们来说说另一个网红nosql数据库:MongoDB。有这么一个介绍MongoDB的说法是:MongoDB是非关系数据库当中功能最丰富,最像关系数据库的。这么说是因为作为一个面向文档存储型、数据结构非常松散自由的的数据库,却拥有着丰富的功能特性如强大灵活的查询语言、支持二级索引等特性,新版本的MongDB甚至还支持事务。听小伙伴说MongoDB不仅功能丰富,而且读性能强大到远远把MySQL甩在后面,今天我就代替大家来动手进行一下数据库测试,揭开MongoDB的神秘“面纱”。
磊哥测评
2019/01/28
1.9K0
磊哥评测之数据库:腾讯云MongoDB vs自建
数据库评测报告第一期:MySQL-5.7
该文章是一篇关于MySQL数据库引擎优化实践的技术文章。通过对比MySQL和MariaDB两种数据库引擎的优化实践,总结了在数据库优化方面的经验,包括MySQL数据库引擎选择、MariaDB数据库引擎选择、MySQL数据库引擎优化实践、MariaDB数据库引擎优化实践和MySQL与MariaDB性能比较。
迪B哥
2017/07/12
3K4
数据库评测报告第一期:MySQL-5.7
数据库性能评测:整体性能对比
导语 随着版本升级,关系型数据库和缓存数据库整体性能比之前都有大幅度的提升,衡量数据库性能的三个重要指标是:数据库吞吐量(QPS)、延迟时长(Latency)和稳定性,以下从这三个方面对几种数据库进行
李俊飞
2017/07/04
23.3K2
数据库性能评测:整体性能对比
MongoDB vs ScyllaDB: 性能、扩展性和成本对比
我们对这两种数据库进行了深入的基准测试研究,应用了超过133项测量指标进行全面比较。以下是测试结果。
云云众生s
2024/03/28
8190
MongoDB vs ScyllaDB: 性能、扩展性和成本对比
【数据库评测报告】第三期:innodb、tokudb压缩性能
这一期的数据库测评报告让咱们一起来讨论下数据压缩这一话题。
迪B哥
2018/11/29
2.7K0
磊哥测评之MongoDB篇
上期文章我们聊到了Redis,这期我们来说说另一个网红NoSQL数据库——MongoDB。 PS:其他历史测评请直接翻到文末~ 有这么一个介绍MongoDB的说法是:MongoDB是非关系数据库当中功能最丰富、最像关系数据库的。这么说是因为作为一个面向文档存储型、数据结构非常松散自由的数据库,MongoDB却拥有着丰富的功能特性如强大灵活的查询语言、支持二级索引等,新版本的MongDB甚至还支持事务。 MongoDB不仅功能丰富,而且读性能强大到远远把MySQL甩在后面,今天我就代替大家来动手进行一下数据
腾讯云数据库 TencentDB
2019/03/26
1.9K1
磊哥测评之MongoDB篇
高可用mongodb集群(分片+副本):性能测试
Yahoo! Cloud Serving Benchmark (YCSB) 是一个Java语言实现的用于云端或者服务器端的数据库性能测试工具,其内部涵盖了常见的NoSQL数据库产品,如Cassandra、MongoDB、HBase、Redis等等。
雪人
2022/10/13
1.5K0
MongoDB第二期:压缩与索引
迪B哥
2017/07/10
8.1K0
MongoDB第二期:压缩与索引
干货!万亿级数据库MongoDB集群性能优化实践合辑(上)
本文来自OPPO文档数据库mongodb负责人杨亚洲老师2020年深圳Qcon全球软件开发大会《专题:现代数据架构》专场、dbaplus专场:万亿级数据库MongoDB集群性能优化实践、mongodb2020年终盛会分享,分享内容如下(体验万亿级mongodb服务层、存储引擎、高并发线程模型、异地多活容灾等实现细节)。
MongoDB中文社区
2021/04/02
2.9K0
Mycat基准测试报告 原
好久没上OSC,上面安排测下Mycat,于是申请服务器,花了两个周做出这个东西,供以借鉴。
尚浩宇
2018/08/17
1.4K0
Mycat基准测试报告
                                                                            原
RedisJson发布官方性能报告,性能碾压ES和Mongo
近期官网给出了RedisJson(RedisSearch)的性能测试报告,可谓碾压其他NoSQL,下面是核心的报告内容,先上结论:
码农架构
2021/12/27
1.2K0
RedisJson发布官方性能报告,性能碾压ES和Mongo
千亿数据扛不住,三思后还是从MySQL迁走了……
杨亚洲,前滴滴出行专家工程师,现任OPPO文档数据库MongoDB负责人,负责数万亿级数据量文档数据库MongoDB内核研发、性能优化及运维工作,一直专注于分布式缓存、高性能服务端、数据库、中间件等相关研发。后续持续分享《MongoDB内核源码设计、性能优化、最佳运维实践》。
jeanron100
2021/06/09
1.3K0
【数据库评测报告】MyRocks VS MySQL57
本文介绍了MySQL 5.6中InnoDB存储引擎的压缩特性,通过对比非压缩和压缩状态下的性能表现,展示了压缩特性对数据库性能的提升。同时,文章还介绍了MySQL 5.7中InnoDB存储引擎的新特性,包括JSON支持、Full Text Search、InnoDB Cluster等,并探讨了这些新特性对MySQL 5.7性能的影响。
周奇
2017/07/07
5.2K0
【数据库评测报告】MyRocks VS MySQL57
BlockchainDB - 构建于区块链之上的分片数据库
这篇论文主要分为9部分,其中1 2节介绍BlockchainDB要解决的问题,3 4 5 6四节介绍了BlockchainDB的架构和技术细节,7节对其性能进行评估,最后总结展望。
陆道峰
2020/06/17
1.6K0
MongoDB CTO 兼联合创始人Eliot Horowitz: 文档无处不在
在MongoDB的引领下,大量新的文档型数据库在过去的十年里相继面世,传统数据库也都纷纷增加了文档功能。2017年,微软在 Cosmos 数据库(曾经被命名为“DocumentDB”)的基础上添加了MongoDB API 层,最近亚马逊又推出了DocumentDB,在其 Aurora 技术的基础上提供了MongoDB 查询语言的一个子集。文档模型,尤其是 MongoDB API,正在蓬勃迅猛发展。
MongoDB中文社区
2019/04/22
1.2K0
MongoDB CTO 兼联合创始人Eliot Horowitz: 文档无处不在
YCSB:雅虎推出的云数据库基准测试套件
EarlGrey
2017/03/08
4.2K0
YCSB:雅虎推出的云数据库基准测试套件
RedisJson 横空出世,比 ES 快7 倍,惊爆了!
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/08/29
5780
RedisJson 横空出世,比 ES 快7 倍,惊爆了!
MongoDB 第三期:托管 MongoDB 存储服务
迪B哥
2017/08/02
1.9K0
MongoDB 第三期:托管 MongoDB 存储服务
多级缓存设计详解 | 给数据库减负,刻不容缓!
物流研发部架构师,GIS技术部负责人,2012年加入京东,多年一线团队大促备战经验,负责物流研发一些部门的架构工作,专注于低延迟系统设计与海量数据处理。曾负责青龙配送分单团队,主导重构架构设计与主要研发工作,短期内提升了服务性能数十倍。还设计研发了地址配送网点分类模型,实现了配送到路区的精准化分单,降本增效,大幅提升了自动分单准确率。目前负责物流GIS部门,先后主导了国标转京标、物流可视化等项目。
京东技术
2018/07/30
3.7K0
多级缓存设计详解 | 给数据库减负,刻不容缓!
评测云硬盘读写性能
通过讲解如何优雅扩容云硬盘,我们了解了云盘连接到服务器上的具体操作过程。那么,如何进一步了解已挂载硬盘的实际性能呢?你或许会疑惑,测试硬盘性能,为什么不能用Linux系统自带的dd工具呢?而且不少人之前都这么用的:
溪歪歪
2020/12/13
8.2K7
评测云硬盘读写性能
相关推荐
磊哥评测之数据库:腾讯云MongoDB vs自建
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档