分类: 大杂烩

  • 关系型数据库使用中的误区系列:最大误区

        开了订阅号,看到序言的PV数往上跳过了自己的期望值,尤其看到订阅者中男女比例已经达到二比一时,小小的脸红之余有了一点小小的膨胀。SO笔耕不能停!虚心接受大家意见,调整了下段落布局,希望大家喜欢。
    
        这次,我们来简单说说关系型数据库,我喜欢使用大量的引用和比喻来阐述观点,文章会很碎同时也会比较发散,希望能为以后和之前的文章承上启下。最后我也深信一点,能够百度到的“知识”不是“知识",所以我不是百度的搬运工。
    
        写SQL肯定是一种编程,准确的说是DSL(领域特定语言)编程,ruby之父松本行弘在《代码的未来》一书中用了大量的文字描述这个话题,非常引起我的共鸣,因为我常反思未来是否在业务描述中会有一种DSL可以描述特定业务,那会有多动态,有多抽象,或者这是唯一正确的道路?我想在本文埋下一个伏笔,让大家牵挂着这个问题!这里我最想说的是,主流IT媒体有这样一种观点,“21世纪人人都要学会编程”,我很赞同,但我要补充的说,“21世纪人人都要学会领域特定语言编程”,而不是人人都在写JAVA。
    
        关系型数据库RDBMS的使用往往陷入“误区”,我仔细分析了下,最大的误区在于场景选择!!你需要的是OLTP还是OLAP,这个误区在当下弥漫,99%的中国互联网企业做的架构有问题,那原因是什么呢?
    
        首先我们说说OLTP,就是传统的联机事务,你可以理解为存放线上订单的数据,后台编辑的酒店宴会厅关系数据等。OLAP则指的是联机分析,可能基于某些维度绘制出各种变化的表报,例如:酒店销售周汇总,BD人员出勤季报等。而最最要命的是往往这里的OLAP指的是ROLAP也就是带关系联机分析,所以头痛的是,程序员接到需求就一股脑儿的把这些AP的需求放到了生产环境中的TP服务器里。
    
        这时候一股脑儿的“优化技术”就来了,什么主从分离,方便从库出报表不拖慢主库之类文章百度一搜一大把,试问一下,一个slave能满足报表需求么?生产环境的数据库里的TP表真的能满足你么?外部的三方数据怎么办?SEM的数据难道也扔到宝贵的生产环境里去?你开始有点茅塞顿开,这根本是两种技能栈呀,分属两个部门!TP就应该放在MySQL这样的通常意义上的关系型数据库里,程序员DBA管,而OLTP是应该放在ETL(数据仓库)里由数据仓库管理员处理,你要用SQLServer或者MySQL做数据变形,简直要命!ETL的一些问题,我们将在以后大数据的文章中详细描述。
    
        那么问题的根本原因是什么呢?第一,需求方只知道需求,大部分产品经理无法区分这样的需求到底是由哪个部门完成,第二,有些公司根本没有数据仓库,这就有点无奈,第三,厂商的胡乱宣传让大家总期待在某一个版本会有一个allinone的东西出现!
    
        我的建议是,如果是报表类需求请交给ETL来处理,程序员可能只参与到ETL分层中的ODL(原始数据层)那层,区分是否是报表有一个原则很简单,需求中的报表肯定不是实时的!如果实时的报表,那么我认为他其实不是报表,已经是业务的一部分!是一种聚合后的决策用工具,如果这样的需求,必须在你的关系库里完成,当然额外的我想提醒你,如果在这样的查询中出现了select嵌套或者group having之类的聚合后筛选,我可以基本断定你的代码有问题,你缺少一张真正的物化表!不是物化视图,是一张真的表!
    
        如果你对ETL还有关系型数据库持续感兴趣请关注本公众号budaoxing,因为我接下来就是介绍关系型数据库的第二大误区。
  • 写在订阅号开篇

        还有半个月,入职到喜啦就满3年,到喜啦让我学习到很多,为做一个纪念,老夫决定开个订阅号把自己工作中的感悟分享下,主要涉及代码设计模式,大数据处理,业务设计,软件工程,运维测试自动化,带团队笔记。把已分享的和还未分享的碎片整理下,系统的写出来,顺便给自己一个时间的总结。
    
        如同每次做培训之前说的一样,我的文字是我的思想,是我的感悟,请亲手试过觉得好再转变成自己的想法!张鸣先生的《重读中国近代史读》的序中有这样一段,大意是A和B介绍A的思想,B并不认同,但在某些场合,B却会用A的思想去反驳C,因为B没有自己的思想,这是最要不得的!现在的IT行业有一个怪现象,喜欢聚众,好似人多力量大,一会一个座谈会,一会一个分享课,嘉宾各个抬头多多,浮躁的气氛仿佛看到了民间科学爱好者只凭胡思乱想和刷脸来处理问题,严肃的仪式化的东西只是外在,我们需要的是探究本质,请务必不要拿来主义,和碎片化学习!
    
        首先,我认为这世界所有东西都是相通的,软件工程亦是如此,我时常举一个例子给想进入互联网的传统老板来解释为什么现在单个软件项目的造价是如此昂贵,而非想象中一个网站找个大学生几千块就能搞定。我用美食做例子,作为一个饕餮爱好者,中国的美食博大精深,好比我爱的全聚德,那好味道我不想再描述,但其本质是很难复制的,你无法在一夜之间开一百家全聚德,因为掌握烤鸭技术的厨师无法短时间内陪训出来。但反观麦当劳,标准的流程化作业,任何一个人在短时间培训都能成为操作工,全球的麦当劳味道几乎一致,这样的公司才能成为世界五百强。现代软件工程提供的也是这般效果,我们将代码切片分层,根据场景组装,为能预见的复杂性业务设计出复杂的解决方案,试问你作为老板会不会为一个“可以复制的成功”埋单?我想我是会的,佛瑞德·布鲁克斯在《没有银弹:软件工程的本质性与附属性工作》中阐述了一个观点, 没有任何一项技术或方法可使软件工程的生产力在十年内提高十倍。在实践中,我很同意,充斥炫酷的IT专业名词没有带来什么变化,软件行业能力高低依然是设计能力的体现,我想把我的思想最重要的一个环节,“优秀的代码是最精确描述业务结果"带给大家。
    
        作为开篇最后我想说,本想早点开始动手写的,但我是一个拖沓的处女座,请大家原谅我的手慢。我的文字肯定没有张公子的好,但如果喜欢,请随手转发,更欢迎大家加入到喜啦技术团队,这是一个年轻的喜欢学习的团队,颜值高技术强!我会以1-2天的频率更新本订阅号,绝无保留。
  • 重新启程

    好多年没有写blog,感觉内心都不够平静,装了一个ghost,很方便,可以用Markdown语法写,好吧重新启程。