本文由云+社区发表

作者:磊哥

上期文章我们聊到了redis。这期我们来说说另一个网红nosql数据库:MongoDB。有这么一个介绍MongoDB的说法是:MongoDB是非关系数据库当中功能最丰富,最像关系数据库的。这么说是因为作为一个面向文档存储型、数据结构非常松散自由的的数据库,却拥有着丰富的功能特性如强大灵活的查询语言、支持二级索引等特性,新版本的MongDB甚至还支持事务。听小伙伴说MongoDB不仅功能丰富,而且读性能强大到远远把MySQL甩在后面,今天我就代替大家来动手进行一下数据库测试,揭开MongoDB的神秘“面纱”。

为了进行数据库对比测试,这次我购买了腾讯云MongoDB的主从版(1主2从),同时在同样配置的云主机自建MongoDB作为对比。

下面给出CentOS7 64位上安装MongoDB 3.6的实践如下:

vim /etc/yum.repos.d/mongod-org.repo

编辑内容如下:

[mongodb-org]

name=MongoDB Repository

baseurl=https://repo.mongodb.org/yum/...$releasever/mongodb-org/3.6/x86_64/

gpgcheck=1

enabled=1

gpgkey=https://www.mongodb.org/stati...

执行指令yum install mongodb-org -y安装

vim /etc/mongod.conf

此处根据自己需求修改bindIp: 0.0.0.0 #监听地址 port: 27017 #监听端口

systemctl start mongod.service #开启服务

netstat -anpt | grep 27017 #检查是否启动

服务开启后可以使用上面的指令测试服务是否启动,如果成功启动的话会看到结果如下图所示:

如果无法启动,需要根据日志分析具体原因。根据笔者的实践,大部分的原因会落在配置和权限上。如果排除错误太难,建议重新安装来的快一点。

接下来需要安装数据库测试工具,这次我们使用YCSB,雅虎开发的一个很强大的测试工具。

在安装YCSB前需要安装Java和Maven,测试前需要在workloads文件夹中创建配置文件,配置如下图所示:

考虑到购买的mongoDB是副本集配置,一个主节点带两个从节点,我们在本地也配置好副本集群,使用用 ./mongod --replSet amymongo --dbpath /data/27019 --port 27019 --logpath /var/log/mongodb/27019.log --fork 配置从节点,具体配置和初始化方法参考https://cloud.tencent.com/dev...(当然部署在本机的方案不能保证高可用)

在workloads中防止配置文件,我们选择插入1千万条记录,执行1千万次操作,测试两种场景:read/update 9:1和纯insert场景。

废话少说,下面就一起来看看测试结果吧。

场景读更新read/update 9:1,单位ops/sec:

场景纯写入insert,单位ops/sec:

场景读更新read/update 9:1,单位us(延时):

场景纯写入insert,单位us(延时):

看来mongodb真的是一个高性能的数据库,为啥呢,因为mongo的延时单位居然是us微秒、微秒、微秒。。。16GB的内存基本上20线程之后延时就会大大增加,在100线程的时候基本上延时基本在1000us以上,而读多场景跟写入场景相比,写入场景的性能略差一点,随着线程数的增大,写入场景的吞吐量和延时表现和读更新场景的差距会扩大。

有读者可能会有疑惑,既然数据库测试是比较云和自建,看起来差距也没有那么大,用自建好像也可以接受啊。这里我要把测试中的发现讲给大家听,听完之后大家就明白了。

第一点,笔者买的是16G内存的机器(流下了没有钱的泪水),测试的时候发现cvm的内存占用基本到了百分之60左右,笔者在建立副本集和加大测试数据量(购买数据量的百分之80)之后发现,内存占用基本到了百分之80以上。看来mongo的第一个缺点,就是对内存的消耗真的非常可怕!!如果遇到高并发大数据量读写,恐怕分分钟就存在着存在着OOM的风险。

所以这里奉劝各位同学,如果要自建MongoDB,还是尽量购买超大内存满足业务需求,避免在业务高峰的时候被“干掉”。如果因为跟笔者一样贫穷不想买那么大的内存,可以考虑使用云数据库,云MongoDB具备动态伸缩能力,即使没有买够大的内存,也完全来得及在业务高峰扩容, 即使发生故障,也有完善的数据自动备份和无损恢复机制来恢复数据,在可用性上保障就高多了。

第二点,笔者在后续测试本地副本集的时候,尝试读secondary节点的数据,结果遇到了读延迟很高的情况。在网上研究了一下发现是因为,MongoDB 复制集里 Secondary 不断从主上批量拉取 oplog,然后在本地重放,以保证数据与 Primary 一致。这里为了防止脏读,会加一个锁阻塞所有的读请求。

所以如果遇到 Secondary 重放 oplog 占用锁时间长,读取的延时也会对应变长。这个锁最高能锁多久呢,看到有个案例锁了接近一个小时。。。看到的人内心一定是崩溃的,而在云Mongo测试的时候没有遇到这个情况,我想这一定是针对这个缺陷做了很大的改进,使用了其他方法实现同步。

总的来说,MongoDB确实可以不借助其他第三方工具实现高可用和分片功能,具备的高可用的故障切换,分片可以实现数据的分部均衡,大数据量的时候通过路由实现了服务器的负载均衡。所以MongoDB自身的可用性较高,也难怪会在短短时间内成为流行的nosql数据库。

但是MongoDB也存在着一些坑:如对内存的占用过高、对网络的占用过高、存在从节点锁导致读几乎不可用的情况,这些情况在实际业务使用的时候会导致很严重的问题,集群宕机、服务瘫痪、数据丢失无时不刻不是覆盖在运维同学心头的阴影。这个时候云MongoDB几乎就是救星,弹性伸缩、随时扩容、真正安全的数据热备以及强大的专业运维架构师团队,才能真的确保业务安全无故障的运行下去。

写到这里,笔者也在思考,云数据库到底是什么,它仅仅是把数据库封装一下,改改内核,提供给使用者吗?不,云数据库应当是一整套专业服务,除了数据库之外,还有监控、安全、迁移、灾备、运维等一系列的服务提供。能让业务开发专注于业务本身,把专业的交给专业的人去做。

此文已由腾讯云+社区在各渠道发布

获取更多新鲜技术干货,可以关注我们腾讯云技术社区-云加社区官方号及知乎机构号

磊哥评测之数据库:腾讯云MongoDB vs自建相关推荐

  1. 教程:腾讯云使用WordPress从零开始建站-黑科鸡Blog(六)

    上期教程: 教程:腾讯云使用WordPress从零开始建站-黑科鸡Blog(五) 教程:腾讯云使用WordPress从零开始建站-黑科鸡Blog(六) 好的,上期我们已经进入了WordPress后台了 ...

  2. 教程:腾讯云使用WordPress从零开始建站-黑科鸡Blog(一)

    教程:腾讯云使用WordPress从零开始建站-黑科鸡Blog(一) 本文写给想做网站却不知从何下手的朋友.现在越来越多的新手站长加入到个人站长这个领域,其中很大一部分是没有任何建站基础的,接下来我会 ...

  3. 教程:腾讯云使用WordPress从零开始建站-黑科鸡Blog(四)

    上期教程: 教程:腾讯云使用WordPress从零开始建站-黑科鸡Blog(三) 教程:腾讯云使用WordPress从零开始建站-黑科鸡Blog(四) 本文写给想做网站却不知从何下手的朋友.现在越来越 ...

  4. 教程:腾讯云使用WordPress从零开始建站-黑科鸡Blog(五)

    上期教程: 教程:腾讯云使用WordPress从零开始建站-黑科鸡Blog(四) 教程:腾讯云使用WordPress从零开始建站-黑科鸡Blog(五) 本文写给想做网站却不知从何下手的朋友.现在越来越 ...

  5. 教程:腾讯云使用WordPress从零开始建站-黑科鸡Blog(三)

    上期教程:教程:腾讯云使用WordPress从零开始建站-黑科鸡Blog(二) 教程:腾讯云使用WordPress从零开始建站-黑科鸡Blog(三) 本文写给想做网站却不知从何下手的朋友.现在越来越多 ...

  6. 教程:腾讯云使用WordPress从零开始建站-黑科鸡Blog(二)

    上期教程: 教程:腾讯云使用WordPress从零开始建站-黑科鸡Blog(一) 教程:腾讯云使用WordPress从零开始建站-黑科鸡Blog(二) 本文写给想做网站却不知从何下手的朋友.现在越来越 ...

  7. 磊哥测评之数据库SaaS篇:腾讯云控制台、DMC和小程序

    本文由云+社区发表 作者:腾讯云数据库 随着云计算和数据库技术的发展,数据库正在变得越来越强大.数据库的性能如处理速度.对高并发的支持在节节攀升,同时分布式.实时的数据分析.兼容主流数据库等强大的性能 ...

  8. mysql数据库腾讯云添加用户,解决腾讯云cdb的基础版mysql不支持新建账号

    腾讯云一贯被叫良心云,确实挺良心的,机器稳定,工单响应快,各种各样的活动不停.我也入手了不少的机器. 刚新入手了一个基础版的cdb云数据库,才3块钱一个月,一口气买了3年,美滋滋. 去到网页控制面板, ...

  9. 第五批可信区块链评测出炉 腾讯云、百度、蚂蚁集团等21家通过

    7月8日消息,中国信通院第五批"可信区块链评测"于2021年2月至6月进行,历经4个月的沟通交流.专业测试.专家评审等环节,共计21家单位的36款产品通过了本期测评.测试项目覆盖区 ...

最新文章

  1. 【文本分类】基于类信息的TF-IDF权重分析与改进
  2. 中国在线直播教育行业发展形势与竞争策略研究报告2022-2028年
  3. Spring Cloud Data Flow手动安装
  4. PAT乙级 1039 到底买不买
  5. easymodbus_easymodbus4j基于netty的modbus协议快速开发工具
  6. week7 read
  7. 四分位数(Quartiles)、十分位数(Deciles)和百分位数(Percentiles
  8. 架构整洁之道:优秀设计或多余,有效设计最可取
  9. Win10下OMNeT 5.X 遇到Simulating tictoc-tictoc1-“ has encountereda problemFinished with Error问题
  10. iOS AVCapture前置摄像头不显示镜像翻转
  11. 巴比特 | 元宇宙每日必读:微博动漫将招募全球各类虚拟偶像并为其提供扶持...
  12. 向大家介绍一款代码阅读工具——Scitools Understand
  13. ubuntu下深度启动盘制作工具
  14. 3分钟了解伺服驱动器的工作原理
  15. 高德地图坐标转平面坐标
  16. Java8用jmap输出jvm参数
  17. delist(滴滴delist)
  18. java pass can not be_java – 校验和失败:Kerberos / Spring / Active Directory(2008)
  19. 曾经宣称万亿市场的智能机器人,究竟怎么了
  20. MGRE与OSPF综合实验

热门文章

  1. vsts~CI/CD实现自动化编译
  2. Jenkins与网站代码上线解决方案
  3. 印度HCL揭秘云计算五大盈利模式
  4. linux系统性能测试之虚拟内存管理篇
  5. 修改MS SQL2000数据库的所有者,很实用
  6. 使用Hyper-v 创建Windows Server 2008 Cluster(二)
  7. 深入浅出剖析 OpenCV 视觉处理
  8. pytorch:多项式回归
  9. php如何修改xml中element值,php修改xml节点的值
  10. 注册中心ZooKeeper、Eureka、Consul 对比