百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

专访搜狗DBA负责人王林平:为何从Oracle转向MySQL?

moboyou 2025-03-18 22:05 8 浏览

王林平

CSDN:首先,请做个自我介绍,目前所负责的领域以及所在公司。

王林平:大家好,我是王林平,目前在搜狗商业平台研发部工作。

主要负责商业广告数据库的维护、优化、架构设计、流程体系建设、自动化运维平台建设等工作,目前比较关注数据库备份恢复、性能优化、运维自动化等几个领域。

CSDN:你是从何时加入搜狗的?从事数据库开发和运维这么多年给你最大的感悟是什么?

王林平:我是2011年初加入搜狗的,到搜狗快五年了,经历了数据库团队由小到大逐步成熟的过程。从事运维工作已经八年多,感受最深的有两点:

  • 第一,责任心重于一切。我们维护的是企业最核心的信息—-数据,一旦数据丢失或者数据异常,带来的损失不可估量。高度的责任心和良好的职业道德是成为一个好的运维工作者的的最重要前提。

  • 第二,自我驱动很重要。运维这项工作在学校的专业里面是没有的,如何开始做运维,如何做好运维,如何让运维工作更有价值,都是需要我们自己去探索,不断给自己提出新的目标并探索解决的方案,能为企业创造更高的价值。

CSDN:目前搜狗主要使用的数据库是什么?为何想到从oracle转向MYSQL呢?

王林平:目前搜狗主要使用的数据库是MySQL、MongoDB、HBase来存储数据。MySQL主要存储对数据状态有要求和更新频繁的数据;MongoDB主要用于存储计费数据、日志数据和流水数据;HBase主要用来做数据分析和存储大数据内容。

从Oracle转向MySQL主要是出于三个方面的原因:

  • 第一,降低运维成本。Oracle数据库自动化运维实现难度和成本较高,而MySQL运维自动化难度和成本相对较低,当数据库实例不断成倍增长的时候,使用MySQL可以在有限人力的情况下维护更多的数据库实例。

  • 第二,降低软件成本。Oracle License成本较高,MySQL及其分支目前是免费的。

  • 第三,提高可扩展性。MySQL是开源数据库,便于有技术能力的公司根据业务发展情况自己开发定制一些数据库周边服务,使数据库使用的扩展性提高,而Oracle对这方面的支持比较一般。

CSDN:你怎么看待MYSQL的性能?有哪些优缺点? 搜狗基于MYSQL的开发场景有哪些?

王林平: MySQL在单实例性能方面和Oracle相比还有一些差距,我们通过规范和技术手段来降低这些性能差距带来的问题。

首先,大量甚至海量数据的增删改、查询、聚合查询的性能还有待提高。为了规避这些问题,我们在开发规范里面要求MySQL的实例大小低于150G,要求带变长行的表行数不超过500w,尽量降低查询、修改、删除脚本的复杂度,以原子查询的方式访问数据库。

其次,MySQL的优化器还不够完善。MySQL的优化器还更接近于基于规则的优化,而不是基于成本的优化,对复杂查询的智能优化有待提高。因此MySQL数据库多表联合查询的性能还不如Oracle。我们的开发规范要求开发人员尽量避免三个表以上的表关联查询。

第三,原生版本的MySQL主从延迟挺严重,远高于Oracle数据库。为此我们将批量更新和批量删除的事务的粒度拆分的比较细,同时在核心业务上使用SSD硬盘来降低主从延迟对业务的影响。

MySQL有以下优点:灵活、可配置、可二次开发、方便维护管理,集群的性能和扩展性强。

MySQL的缺点是存储和查询的数据量、并发数有限,主从非强一致。这就要求DBA必须对数据库的业务深入理解,合理规划并发数、数据量,进行预估、拆分等架构优化来规避这些不足。

我所在的商业广告部门很多平台是面向客户的高并发、高压力的系统,应用MySQL数据库存储广告物料、客户资料、计费、资金、日志、管理平台、基础架构平台等业务数据。不同平台对性能、稳定性、安全性要求不同,我们会根据平台特点选择合理的MySQL部署和配置方式。

CSDN:据了解,搜狗实现了数据库的“一键部署”功能,请问这是怎样的一种解决方案?

王林平:可以理解“一键部署”是一种理念和工具的实现。这个理念是基于MySQL数据库本身的特点出现的,MySQL数据库的安装配置步骤相对简单,安装过程中出错的概率相对比较低,随着业务量增加这种重复劳动量急剧增加,给DBA造成很大的负担,重复劳动的价值并不高,因此考虑对这部分工作进行自动化。

起源:最初是为了降低部署成本,开发了一个很简陋的脚本工具,只是将数据库目录创建好,二进制包解压缩,并给出DBA启动数据库的命令。

发展:为了平台化运维需求丰富了功能。随着业务的不断发展,数据库实例越来越多,由几十增长到了上百个,甚至几百个,规模化运维要求有集中的信息管理平台,因此一键部署工具将数据库、服务器、实例信息做了入库管理,同时为了有效提高自动化运维的效率,我们对操作系统、硬件等信息进行了标准化,一键部署工具还需要对这些信息进行校验,一键部署工具还对备份系统、监控系统做了初始化。一键部署工具执行完之后,数据库的使用和基本信息的入库工作,包括后续工作的准备工作都完成了,可以投入生产环境使用。

展望:我们的运维自动化起步是从一键部署开始的,未来我们更倾向于将95%甚至比例更多的工作用Web工具实现,同时有完整的交互界面,一键部署可能会随着业务和需求的增长越来越庞大,会拆分成N键部署,但是依旧高效,期待鼠标点几下、手指触碰几下就完成数据库部署和运维高效时代到来。

CSDN:安全问题,一直是数据库运维人士关注重点,你们是如何确保数据库安全问题的?

王林平:数据的安全我理解应该从两个大的维度去分析,第一是访问安全,不会出现不应该有的访问,不会因为不应该有的访问崩溃,用户的敏感数据不会泄露;第二是数据安全,数据可恢复,不丢失。

访问安全,我们是基于操作系统的安全机制和数据库自身的安全机制来保证的;在操作系统的安全层面,我们采用IPTABLES白名单的方式,仅允许指定范围的IP的内网服务器访问数据库,同时严格隔离线上和线下。在数据库自身安全机制上面,我们针对细粒度IP进行授权,并且回收了表的创建、删除、DDL操作权限;同时我们开发、部署了数据库访问巡检工具,实时屏蔽不合法的访问。针对访问安全,为了降低授权成本,我们研发并全部使用自动化授权工具授权。

数据安全,我们主要是通过多级备份策略来保证的,多级备份策略是指:热备份+逻辑备份+二级备份+定制备份。热备份保证数据库可以在一周内恢复到某个时间点,逻辑备份作为热备份的补充;二级备份主要是将历史上的逻辑备份做一下远程双份备份,以规避误操作带来的损失;定制备份是针对一些特殊业务需求,做按天切片备份,满足业务对某天数据恢复的需求。同时为了确保数据快速恢复,我们尽量把单实例的大小控制在100G以内。热备份+逻辑备份+二级备份可以满足大部分广告数据的恢复需求,而对于资金、计费、财务类数据,由于涉及到审计,我们会与业务方确认是否需要补充定制备份。

CSDN:在你看来,一名优秀的技术人应该具备怎样的素质?

王林平:技术人的范围有些广了,我谈一下运维人员的必备素质吧。

首先是知识沉淀。基础知识是做好工作的基石。系统的学习各类基础知识,熟悉数据库、操作系统的架构及相关工具的使用,熟悉主流脚本语言的开发,同时还需要对故障定位有一定的理解。

其次是经验沉淀。要耐得住寂寞,不断积累经验。做运维工作需要丰富的经验,高并发、大数据量运维经验,大量服务器和实例的运维经验。在关键的时候这些经验会拯救企业的服务和数据。

再次是业务沉淀。要具备较强的业务理解能力,深入并精通所在岗位的业务。技术是为业务服务的,技术人员到一个新的岗位会的只是通用技术,技术适应并结合业务才能发挥更大的作用。

最后是软技能的沉淀。较强的执行力,适应业务、技术的创新能力,良好的沟通协作能力和组织能力,优秀的团队配合能力;细致、冷静、沉稳,优秀的判断能力和紧急状况择优处理能力;充分的理解和被理解。要有不断更新自己的欲望和自我驱动力。互联网技术日新月异的,行业的发展非常迅速,必须不断地学习新知识和技能,才能跟上时代,更好的成长。

CSDN:给从事数据库运维的开发者分享些建议吧。

王林平:有几点想法分享下:

  • 第一,运维工作最重要的是稳定性。判断是否要做一件事比做好一件事更重要。

  • 第二,自动化运维已经成为当前主要的运维方式。互联网运维进入自动化时代,以开放的心态面对现状展望未来,修炼自己全面技术能力很重要,除了会拿来,更需要会创造,让人去想,让机器做事。

  • 第三,工作工具很重要。有一套自己的工作工具,可以事半功倍。

  • 第四,需要建立服务意识和服务体系。作为后台支撑团队,提供更好的数据相关服务是最重要的。

  • 第五,低头走路别忘记抬头看天。做好本职工作的同时要时刻考虑自己和团队的价值是什么,对业务和产品有什么贡献。

CSDN:其他有需要补充的吗?

王林平:从数据库运维发展历程来看,主流的互联网公司的路线基本类似,不同公司在不同的领域有自己的优势。我们在规模化运维方面积累了一些经验,也在国内外一些技术交流大会上学习到了许多经验,希望整个行业能够加强交流频度和深度,互通有无,使数据库运维更快速地发展。

本文为CSDN原创,请点击

阅读原文

查看完整文章并参与讨论

如果您喜欢这篇文章,请点击右上角

将本文分享给你的朋友

相关推荐

验证IronPython的ScriptEngine和ScriptScope的兼容性验证机制?

测试和验证IronPython兼容性机制的完整指南IronPython的ScriptEngine和ScriptScope兼容性验证机制需要通过多层次测试确保其正确性。以下是系统化的测试方法和实践...

C#+Python 热更新技术在游戏开发中的核心应用场景

一、核心玩法逻辑动态更新1.战斗系统实时调优技能逻辑热更新:通过Python动态修改技能伤害公式、特效触发条件,例如:python#实时调整法师大招伤害系数defupdate_firest...

不到100行代码制作各种证件照

文|某某白米饭来源:Python技术「ID:pythonall」生活中经常需要使用各种版本的电子版证件照,如:红底、蓝底、白底、一寸、两寸等等。在Python中替换图片背景色可以用Ima...

python从入门到脱坑 输入与输出——print()函数

大家好今天开始系统的讲解一些入门课程,遇到不会的也不用想太多,跟着写一遍,学习到新内容是你就会明白.以下是针对Python初学者的print()函数详解,从基础到实用技巧,配合清晰示例:一、最基础用法...

外婆都能学会的Python教程(七):Python中循环语句

前言Python是一个非常容易上手的编程语言,它的语法简单,而且功能强大,非常适合初学者学习,它的语法规则非常简单,只要按照规则写出代码,Python解释器就可以执行。下面是Python的入门教程循环...

解释一下Python脚本中版本号声明的作用

在Python脚本中声明版本号(如__version__变量)是一种常见的元数据管理实践,在IronPython的兼容性验证机制中具有重要作用。以下是版本号声明的核心作用及实现原理:一、版本号...

除了版本号声明,还有哪些元数据可以用于Python脚本的兼容性管理

在Python脚本的兼容性管理中,除了版本号声明外,还有多种元数据可以用于增强脚本与宿主环境的交互和验证。以下是一些关键的元数据类型及其应用场景:一、环境依赖声明1.Python版本要求pyth...

使用python实现人脸检测

一,准备dlib库下载:提取码1111dlib环境配置数据集下载python3.8opencv3.4.11二,代码老规矩,先导入包#导入包importnumpyasnpimport...

Python

fromdjango.shortcutsimportrenderfromdjango.httpimportHttpResponseRedirectfromdjango.core.ur...

如何用Python画一个简单的笑脸

写在前面Python画画,必不可少的要用到小乌龟turtle库函数。对所用到的函数进行说明一下:fromturtleimport*#包含turtle库里面所有的函数,这样写可以不用标名hid...

习惯了各种框架的文件上传,php原生上传图片你还记得吗?

序言:如今各种框架层出不穷,如thinkphp、laravel、yii等,对于功能的封装也是各显其能,以至于很多开发者离开了框架之后就不会开发了,今天我以实际的例子介绍最基本的图片上传功能,希望对一些...

php源码开发的商城系统有什么优点

1、php是一种流行的脚本语言,它编写的程序更容易被人理解。2、php的函数非常丰富,可以通过这些函数来进行开发,而不需要关注代码本身。3、php是一种面向对象的程序语言,它不像Java和...

php宝塔搭建实战Dinner订餐系统php源码

大家好啊,欢迎来到web测评。本期给大家带来一套php开发的Dinner订餐系统php源码,上次是谁要的系统项目啊,帮你找到了,还说不会搭建,让我帮忙录制一期教程,趁着今天有空,简单的录制测试了一下,...

php宝塔搭建实战美食小吃网站系统php源码

大家好啊,我是测评君,欢迎来到web测评。本期给大家带来一套pbootcms开发的美食小吃网站系统php源码,感兴趣的朋友可以自行下载学习。技术架构PHP7.0+nginx+sqlite+...

php中assert和eval的详细介绍(代码示例)

本篇文章给大家带来的内容是关于php中assert和eval的详细介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。assert判断一个表达式是否成立。返回trueo...