从手机的粉丝说起,谈谈数据库选型

手机的厂商与品牌众多,逐渐也形成了各种品牌的手机粉丝。不同的粉丝都瞧不惯别的手机,苹果粉认为安卓手机没法用,安卓粉认为苹果手机徒有其表。我一直是安卓手机的用户,从华强北的山寨机用起,第一台非山寨机用的是目前已经杳无声息的多普达,至今已经有十多年的安卓手机使用历史。有一次当演讲嘉宾,会务组送了一台IPHONE 6 PLUS,拿回家试着用了一下,实在是不适应,就放在家里吃灰了。后来一个朋友的IPHONE摔坏了,就拿去用了。现在的手机厂商很多,各自推出了能够吸引自己的铁粉的产品,从而确保自己能在这个竞争十分激烈的市场中活下去。手机产品粉丝的阵营也十分森严,相互之间也存在着一个鄙视链,不过随着智能手机的发展,大家都不太纠结于用什么手机了。用着用着,大家似乎也都习惯了,用IPHONE的也没觉得自己比用安卓的就高人一等,用安卓的也没有觉得花那么多钱买IPHONE的人烧包。现在的手机用户更关注的是自己手机上的应用是不是丰富,有没有好玩的。

其实数据库领域也是如此,不同的数据库也拥有一大批粉丝,这些粉丝之间也存在着一条鄙视链。Oracle的粉丝觉得Mysql太低端,Mysql的粉丝觉得Oracle是老古董,未来前途堪忧。不过不管怎么样,作为企业的IT部门,总会有一个数据库选型的困境。到底选一个什么样的数据库才能满足我们的需求呢?似乎这个选择关乎企业的生存,选不好,企业信息化将陷入黑暗的深渊。实际上这个担心有些多余了,对于绝大多数企业的绝大多数系统来说,我觉得哪怕采用抓阄都会获得最佳的效果。因为无论你做出了何种选择,只要你坚持了你的选择,你最终都可以走的很好。

可能大家有点不相信我的这个观点,实际上我们从小到大都被起跑线给误导了,从小升初开始到选大学选专业,选工作单位,在经历了无数被认为起跑线的选择之后我们才发现,起跑线永远在你的前面存在着。数据库选型也是一个企业信息化的起跑线,哪怕是你选对了数据库,如何迁移应用,如何用好数据库,如何维护好数据库,如何发展好你的数据库运行管理体系,一系列的起跑线又在前面了。虽然随着你的每个选择,后面的起跑线都各有不同,不过并不存在一选定终身的问题。无论你如何选择,只要你不断地在后面的选择中认真对待每次选择,你总是会成功的。

上面的起跑线理论并不是让你放弃为选择所作的各种努力,而是说你无需过于纠结于技术,实际上,很多企业的数据库选型中影响因素最大的是商务因素。听很多朋友说,领导不懂技术,做出的选择都是商业利益。实际上这句话并没有错,也许你的领导更没有错,是不是这个道理?既然任何选择从技术上讲可能都不是最佳的选择,也都不是最坏的选择,为什么必须把技术因素放在第一位呢?

当然数据库选型也不能不考虑技术因素,因为这涉及到整体使用成本。我曾经到过一家大型的私营制造业企业去推广我们的数据库智能化运维产品,客户说的很现实,你这个系统能不能在我这里试用三个月,三个月后再决定是否购买。我觉得三个月试用期太长了,能不能缩短一些。他对我笑了笑:“我是因为比较认可你的产品,才提出三个月试用的,一般产品我们顶多一个月试用。我们是制造业,比较实际。我们采购你的产品的唯一决定因素是在试用期内你的产品能不能让我们受益,如果你的产品在三个月内没有表现出对我们有用,那么我们就没有理由采购你的产品”。

有没有用,好不好用,能不能用好,这些都是企业在做数据库选型时候更需要关注的问题。数据库系统是十分复杂的系统,因此评判数据库系统好坏的对标十分难做。谈兼容性,大家都符合SQL/1999等规范,你能说谁更好吗?说性能,如何评判性能好坏呢?如果说是为某个系统来选数据库,那么相对比较简单一点,从这套系统中选择一系列典型的SQL语句,按照简单查询、复杂查询、大表连接、大表扫描、索引扫描、统计分析、窗口分析、大数据量并发写入、大数据量查询输出等等分别找出典型场景的SQL去做测试,最后根据测试分值进行排序或者拉出一个及格线来,都很容易做一个性能方面的测评。但是如果为整个企业做数据库选型就是另外一码事了,性能评判的标准就十分难以确定。

可能有朋友看到这里会着急了,不是有Benchmark测试吗,这个标准化测试不就能够十分清晰的界定性能好坏了吗?实际上大家对Benchmark有些误解,TPCC是数据库军备竞赛的产物,实际上体现的是一个数据库系统对于简单交易环境的极致性能。要注意我说的是数据库系统而不是数据库产品,因为除了RDBMS之外,整个运行环境以及对这个运行环境的优化是十分关键的,需要打破整个环境中的所有瓶颈,让RDBMS的能力完全发挥出来,才能跑出好的TPCC指标。Benchmark测试最终考的并不是数据库产品,而是数据库厂商的系统优化能力。曾经和一个国产化数据库厂商交流过,他们对运行环境中数据库的DIRECTIO/BUFFER IO的选择建议是用BUFFER IO,而在Benchmark测试时他们会建议用DIRECTIO。我当时觉得很奇怪,为什么要这样建议呢?他们说Benchmark测试时,数据相对集中,大部分都在DB CACHE里,BUFFER IO不会有太大的帮助,而实际应用环境中,经常会有大数据量的扫描出现,用BUFFER IO实际上会获得更好的用户体验。从这个例子起码可以看清楚一个问题,那就是Benchmark测试只是在模拟一种场景而已,而我们的数据库系统在实际应用中面对的场景是远非Benchmark能够模拟的,因此Benchmark只能作为一种参考,而不能作为决定性的参考因素。

实际上比Benchmark测试更为重要的数据库选型要素是能不能用好某个数据库产品。实际上数据库产品和手机产品类似,大多数大厂的产品在质量、功能、处理能力方面是能够满足我们使用要求的。而能不能用好某个数据库产品,取决于几个因素,首先是企业自身对某个数据库产品的掌握程度和原厂能够对数据库产品提供的服务能力。为什么要把这两个因素放在一起说呢,这是因为目前除了Oracle等商用数据库之外,哪怕是应用十分广泛的MySQL这样的开源数据库,其应用与服务生态都十分脆弱。企业除非能够构建自己的运行维护能力,否则一切只能依靠原厂。昨天一个客户问我MySQL打个安全补丁需要花多少钱?是不是要购买这个补丁。我当时就很诧异,后来他说他们的集成商给他们开价是十来万,给他的2套MYSQL打一个安全补丁,解决安全扫描发现的一个问题单。这个以前用Oracle的时候都知道自己到Mos上下载补丁,自己给数据库跑个OPatch的用户,现在居然变成这样,是我所想象不到的。这让我想起了十年前我给一个客户推荐一个数据库产品时候他的第一反应:“这个厂商规模如何,靠不靠谱”。他第一个考虑的因素并不是技术,而是厂商靠谱不靠谱。当时我十分不理解,不过到了今天我就十分理解他,认同他了。

今天聊的内容有点乱,虽然这些年我在帮很多用户做数据库选型,不过对于数据库选型的复杂性,我也确实很难十分有条理的讲出一些原则来。因为不同的用户其选型的考虑要素是不同的,很难用一种完全标准化的标准去为不同的客户做数据库选型。企业自身的特点、应用开发团队的能力水平、运维能力、资金投入、IT基础架构等都是在数据库选型中要充分考虑的因素。写这篇文章的最主要要传递的一个信息就是,不用太过于焦虑选不到最好的数据库,只要你坚持你的选择,你选的数据库一定是最适合你的数据库。

从手机的粉丝说起,谈谈数据库选型》来自互联网,仅为收藏学习,如侵权请联系删除。本文URL:http://www.bookhoes.com/853.html