热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

数据库性能_如何“玩转”MongoDB?罗辑思维数据库性能优化之路!

篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何“玩转”MongoDB?罗辑思维数据库性能优化之路!相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何“玩转”MongoDB?罗辑思维数据库性能优化之路!相关的知识,希望对你有一定的参考价值。


当整个世界由IT走向DT时代,数据库领域也发生了重大变化,NoSQL成为企业应用常态,这也是MongoDB之所以受欢迎的根本原因。MongoDB介于关系数据库和非关系数据库之间,支持的数据结构非常松散,类似json的bson格式,可存储比较复杂的数据类型。因此,MongoDB可以让开发人员上手更快、系统更容易扩展。

但是,MongoDB到底适用于哪些场景? 在使用MongoDB的时候,需要注意些什么?MongoDB和mysql相比,有何区别?对于一个新手DBA来说,应该从何处入手?可能很多人,都不是特别清楚!在第十届数据库技术大会(DTCC 2019)即将到来之际,罗辑思维首席DBA李丹老师,接受了ITPUB专访,结合罗辑思维的数据库性能优化与实践经验,为我们带了很多干货内容。

一切以业务为中心,MongoDB选型之初

如何“玩转”MongoDB?罗辑思维数据库性能优化之路!

如何“玩转”MongoDB?罗辑思维数据库性能优化之路!

“引入MongoDB,主要是为了解决MySQL集中式架构带来的弊端,包括对海量数据存储、读写分离及弹性扩展不够灵活等问题。” 李丹老师首先介绍了MongoDB选型的初衷。


李丹,有近10年的专职数据库从业经验,主要从事MySQL、MongoDB自动化运维及私有云平台建设,曾专注于开源数据库MySQL、MongoDB等相关技术领域的学习与研究。


其实,罗辑思维整体的数据库架构设计思路,和大多数互联网创业公司的发展脉络差不多。在早期的时候,罗辑思维的数据库完全依赖云厂商,但是随着业务的发展,之前的过度依赖逐渐暴露出了一些缺陷,比如:故障响应速度不够迅速、批量管理不够自动化、资源配置不能按需扩缩容、数据库与数据仓库实时数据不能友好同步等等,类似问题变得越来越棘手。而MongoDB适合大部分OLTP场景,比如:需求频繁变化的游戏业务、要求实时上报的物联网数据、外卖类地理位置查询、TB或PB级别的海量数据存储及99.999%的高可用要求等。特别是MongoDB4.0,引入了事物概念,这对一些具有数据强一致性需求的业务场景来说,也有了更多的选择。当然,没有任何一种数据库能100%适用于所有应用场景,如果你的业务具有很复杂的关联查询,或金融类的业务,那暂时不推荐使用MongoDB。


对于罗辑思维的数据库选型我们通常准从这几个原则:1、一切以业务为中心,什么适合业务需求就用什么; 2、技术社区足够活跃,生态圈相对完善; 3、数据库技术被业界认可,与之相对应的市场人才丰富; 4、数据库相对成熟稳定,案例丰富; 5、DBA和开发人员对数据库都相对熟悉,运维成本低。


增加数据库弹性扩展能力,

MongoDB价值凸显

如何“玩转”MongoDB?罗辑思维数据库性能优化之路!

现在,我们已开始尝试混合云模式,其中数据库类型主要是MySQL和MongoDB,当然Redis缓存数据库我们也广泛使用。MySQL主要分普通主从结构,以及读写分离架构。MySQL虽然优势明显,简单可依赖,用户基数大,案例极其丰富,社区非常活跃,周边工具集完善;但是劣势也非常明显,那就是关系表的不灵活性,高可用及读写分离依赖第三方插件,无法做到弹性扩展等等。


与MySQL相比,MongoDB有着浑然天成的优势,灵活的json类文档模型、丰富的数据压缩模式,可调一致性,基于raft协议的自动高可用等。尤其是mongos分片集群,能让数据自动切片及自动数据均衡,为分布式架构的弹性容量及性能扩展提供了友好的支撑。大家可能比较关心的是如何在高可用切换的时候,如何能实现对业务的透明化?我们采用了“MongoDB+consul”方案,当然也有人采用lvs+MongoDB等。

如何“玩转”MongoDB?罗辑思维数据库性能优化之路!

MongoDB给罗辑思维带来了很大的改变:第一, mongos分布式集群架构,让我们面在对海量数据和高并发的场景下,也能轻松的保证容量及性能的弹性扩、缩容;第二,基于raft协议的自动高可用,给运维带来了极大的便利,无需引入第三方中间件,就能保证业务99.999%的可用性;第三,各语言的MongoDB驱动基本都实现了读写分离功能,在无需引入第三方中间件情况下,轻松实现5种读策略的控制;第四,提供snappy、zilib压缩比达2~5倍的多种不同的数据压缩模式,极大地节约了存储成本。MongoDB很大程度上降低了我们的运维成本,这也让我们有更多的时间在业务早期即可与研发工程师深度配合,进行设计优化。


把握数据库发展趋势,

新手DBA需避免“踩坑”

如何“玩转”MongoDB?罗辑思维数据库性能优化之路!

“坦白说,在刚接触MongoDB的时候,对它的类js语法结构、分布式数据库的理论及运维方式等,感觉很不习惯” 李丹老师如是说。MongoDB是文档型数据库,在使用初期会不太习惯,尤其在使用方式及运维思路上,大多数关系型数据库DBA都会感觉不适应。但是,随着对MongoDB了解的加深,特别是如果经历过大规模的运维实践的考验,你便能切身体会到MongoDB给工作带来的便利性。

 

不过,在MongoDB的构建过程中,的确有很多需要注意的关键点,需要考虑不同场景下的数据迁移问题,比如集群间业务拆分的数据迁移、数据库版本升级的数据迁移、机房间的数据迁移等等。一些不熟悉MongoDB的同行,在做机房迁移的时候,他们认为需要在对应机房搭建一套新集群。实际上,这种方式利用好MongoDB自动高可用特性,直接在对应机房扩节点后,进行高可用切换,就能轻松完成。当然,如果是跨版本数据的迁移一定要注意兼容性,MongoDB在有些版本的特性支持上,可能变化较大。


关于MongoDB的运维,也存在很多问题。比如:读写一致性问题,默认配置的情况下,主节点故障切换可能会引发数据回滚,建议一般配置”写大多数”模式。MongoDB3.4版本,SCRAM-SHA-1的认证策略,可能在高并发短连接模型下会出现cpu负载飙高的情况,这个时候需要对认证策略回退。针对性能优化,通常要对研发人员进行使用及索引优化方面的培训,核心业务DBA会深入业务层面,指导设计与优化。当然我们也会做一些事后的补救措施,如自动分析索引的使用情况、自动慢查询分析推送等等。对于负载过高的情况,可能引发的因素很多。一般来说可能是因为慢查询,特定版本高并发短连接问题等等。通常状态下,如果是阻塞至无法登录,可能需要强制shutdown节点,以rolling的方式快速创建索引。而对特定版本高并发、短连接导致负载高,可降级认证策略,或者业务采用连接池……


推荐阅读
  • 出现_史上最大漏洞出现,你的安卓iPhone电脑都不安全了!
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了史上最大漏洞出现,你的安卓iPhone电脑都不安全了!相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 从高级程序员到CTO的4次能力跃迁!如何选择适合的技术负责人?
    本文讲解了从高级程序员到CTO的4次能力跃迁,以及如何选择适合的技术负责人。在初创期、发展期、成熟期的每个阶段,创业公司需要不同级别的技术负责人来实现复杂功能、解决技术难题、提高交付效率和质量。高级程序员的职责是实现复杂功能、编写核心代码、处理线上bug、解决技术难题。而技术经理则需要提高交付效率和质量。 ... [详细]
  • 【回顾】聚焦DTCC | 巨杉数据库与您相约DTCC 数据库技术大会
    2018年5月10-12日,第九届中国数据库技术大会(DTCC2018)将以“数领先机•智赢未来”为主题,设定2大主会场及20个技术专场,邀请来自国内外互联网、金融、教育等行业百余 ... [详细]
  • 软件测试工程师,需要达到什么水平才能顺利拿到 20k+ 无压力?
    前言最近看到很多应届生晒offer,稍有名气点的公司给出的价格都是一年30多W或者月薪20几k,相比之下工作几年的自己薪资确实很寒酸.根据我自己找工作经历,二线城市一般小公司招聘 ... [详细]
  • Unit4博客&课程总结Unit4作业的架构设计本单元作业的设计我分为了三个模块处理:模型构建+预处理+任务函数,前两部分即为整个图的完整构建,第三部分即为实现题目要求的查询方法。 ... [详细]
  • OpenEdge已经更名为Baetyl。OpenEdge是百度云发布的国内首个开源边缘计算产品,可将云计算能力拓展至用户现场,提供临时离线、低延时的计算 ... [详细]
  • 显卡750ti价格(750ti显卡发行价格)
    |责编:林光楠在当前这个B2BB2C逐步取代传统卖场占据主导地位的时代,通过电商、淘宝平台直接购买电脑相信已经成了不少对DIY认识不太深入的主流用户首选的配机方案。相比线下购买,网 ... [详细]
  • 【Java编码规范】《阿里巴巴Java开发手册(正式版)》发布!
    2019独角兽企业重金招聘Python工程师标准2017年开春之际,诚意献上重磅大礼:阿里巴巴Java开发手册,首次公开阿里官方Ja ... [详细]
  • 数据库异常智能分析与诊断
    数据库,异常, ... [详细]
  • “自主设计与实施的故障注入微服务Sidecar,欢迎大佬批评指正!”
    “故障注入Sidecar“——为您的微服务注入故障以验证集群性能!由于导师和实验室师兄们的科研需要,本人专门以Sidecar的模式设计了一个用于错误注入的微服务模块。该模块可以与任 ... [详细]
  • 全局角度出发讨论敏捷
    JonKern对于是什么促成了敏捷的成功有着自己读到的见解。你可能会不同意他的观点。下面列出了一些建立在项目全局角度之上的关键实践,项目本身就是从此开始的。如果不能从系统角度来做项目,那它就不能达到预期的效果,甚至可能会失败。我很早以前就认为,开发软件就像是在完成一个很长的待办事项列表。我试了很多方法来运行项目,从记事贴到Jira(从Jira刚发布起我就开始使用)。我使用传统Scrum风格的Spr ... [详细]
  • 高可用架构_MySQL高可用架构设计
    文章来自于https:www.jianshu.compd3107bda2963PHP进阶学习交流QQ群:983229225Mysql复制功能介绍Mysql的复制功能提 ... [详细]
  • 架构思考
    2019独角兽企业重金招聘Python工程师标准闲来无事,总结了下架构设计方面的一些思考1、稳定性。一切以稳定为中心。架构尽可能简单、清晰。不过度设计2、解耦拆 ... [详细]
author-avatar
kas8288408
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有