磊哥评测之数据库:腾讯云MongoDB vs自建
本文由云+社区发表
作者:磊哥
上期文章我们聊到了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/redhat/$releasever/mongodb-org/3.6/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc
执行指令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/developer/article/1379231(当然部署在本机的方案不能保证高可用)
在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自建的更多相关文章
- 磊哥测评之数据库SaaS篇:腾讯云控制台、DMC和小程序
本文由云+社区发表 作者:腾讯云数据库 随着云计算和数据库技术的发展,数据库正在变得越来越强大.数据库的性能如处理速度.对高并发的支持在节节攀升,同时分布式.实时的数据分析.兼容主流数据库等强大的性能 ...
- 腾讯云TDSQL审计原理揭秘
版权声明:本文由孙勇福原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/244 来源:腾云阁 https://www.qclo ...
- 关于腾讯云server使用FTP具体配置教程
本文文件夹:-------------------------------------------------------- [-] 腾讯云server介绍 关于腾讯云server使用感受 作为开发人 ...
- 洞见数据库前沿 阿里云数据库最强阵容 DTCC 2019 八大亮点抢先看
摘要: 作为DTCC的老朋友和全球领先的云计算厂商,阿里云数据库团队受邀参加本次技术盛会,不仅将派出重量级嘉宾阵容,还会为广大数据库业内人士和行业用户奉上8场精彩议题.下面小编就为大家提前梳理了8大亮 ...
- 云 MongoDB 优化让 LBS 服务性能提升十倍
欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 随着国内服务共享化的热潮普及,共享单车,共享雨伞,共享充电宝等各种服务如雨后春笋,随之而来的LBS服务定位问题成为了后端服务的一个挑战.M ...
- 腾讯云服务器centos 6.5(jdk+tomcat+vsftp)、腾讯mysql数据库 及 tomcat自启动 配置教程
1.腾讯云数据库配置 1.考虑到安全性问题,,平常不使用root用户登录,新增一个用户名neil,用来管理项目的数据库 a.首先登录root创建db_AA数据库 b.在root用户下,创建neil用户 ...
- 腾讯云数据库团队:浅谈如何对MySQL内核进行深度优化
作者介绍:简怀兵,腾讯云数据库团队高级工程师,负责腾讯云CDB内核及基础设施建设:先后供职于Thomson Reuters和YY等公司,PTimeDB作者,曾获一项发明专利:从事MySQL内核开发工作 ...
- 腾讯云数据库团队:MySQL AHI 实现解析
MySQL 定位用户记录的过程可以描述为:打开索引 -> 根据索引键值逐层查找 B+ 树 branch 结点 -> 定位到叶子结点,将 cursor 定位到满足条件的 rec 上:如果树高 ...
- 腾讯云数据库团队:MySQL数据库的高可用性分析
作者介绍:易固武,腾讯高级工程师,参与腾讯账号安全建设,腾讯数据仓库(TDW)优化改造,腾讯云数据库等项目,对大规模分布式存储和计算系统有浓厚的兴趣和经历 MySQL数据库是目前开源应用最大的关系型数 ...
随机推荐
- 传入两坐标点,利用div+css画线
上样式生成函数代码 lineStyle (x1, y1, x2, y2, lineWidth = 4, color = 'black') { let rectX = x1 < x2 ? x1 : ...
- Java实现生产者与消费者模式
生产者不断向队列中添加数据,消费者不断从队列中获取数据.如果队列满了,则生产者不能添加数据:如果队列为空,则消费者不能获取数据.借助实现了BlockingQueue接口的LinkedBlockingQ ...
- 查看Oracle中存储过程长时间被卡住的原因
1:查V$DB_OBJECT_CACHE SELECT * FROM V$DB_OBJECT_CACHE WHERE name='CUX_OE_ORDER_RPT_PKG' AND LOCKS!='0 ...
- Java课堂笔记(零):内容索引
回想自己学习和使用Java的时间也是很长了.本科期间课堂上浅尝辄止地学习了点皮毛,后来也是搁置不用,未曾深入研究.研究生期间因为项目和实习的原因,基本算是重新拾起Java这门语言,并且接触到了Spri ...
- python爬虫第四天
昨天学到了正则表达式基础知识 :原子 今天开始学习第二个基础知识:元字符 元字符 就是正则表达式中含有特殊含义的一些字符 常见的元字符及含义 符号 含义 . 匹配除换行符以外 的任 ...
- 百度AI
官网:http://ai.baidu.com/tech/face SDK:https://ai.baidu.com/sdk#bfr API说明 百度Face SDK Android 版是一种面向 An ...
- 手机touch事件及参数【转】(自己懒得写了,找了一篇摘过来)
[html5构建触屏网站]之touch事件 前言 一个触屏网站到底和传统的pc端网站有什么区别呢,交互方式的改变首当其冲.例如我们常用的click事件,在触屏设备下是如此无力. 手机上的大部分交互都是 ...
- Anveshak: Placing Edge Servers In The Wild
Anveshak:在野外放置边缘服务器 本文为SIGCOMM 2018 Workshop (Mobile Edge Communications, MECOMM)论文. 笔者翻译了该论文.由于时间仓促 ...
- ubuntu connect to windows folder share
在windows上给远程登录的用户设置一个账号密码.”右击计算机图标“——"管理”——“本地用户和组”——“用户”.然后右击选择“新用户”,输入账号密码,并勾选“密码永不过期”,这样,在远程 ...
- 3-2 Hadoop集群伪分布模式配置部署
Hadoop伪分布模式配置部署 一.实验介绍 1.1 实验内容 hadoop配置文件介绍及修改 hdfs格式化 启动hadoop进程,验证安装 1.2 实验知识点 hadoop核心配置文件 文件系统的 ...