【数据蒋堂】第15期:开放的计算能力为数据库瘦身

【数据蒋堂】第14期:计算封闭性导致臃肿的数据库

我们在上一期谈到,数据库的臃肿,也就是过多的中间表以及相关存储过程,是由于其计算封闭性造成的。如果能够实现独立的计算引擎,使计算不再依赖于数据库提供,那么就可以为数据库瘦身了。

内部来源的中间数据不必再以数据表的形式落地在数据库中,而可以放到文件系统中,由外部计算引擎提供进一步的计算能力。对于只读的中间数据,使用文件存储时不需要考虑再改写,可以更为紧致并采用一定的压缩手段,而且在访问时也不必考虑事务一致性,机制大为简化,这样能获得比数据库更好多的吞吐性能。文件系统还可以采用树形组织方案,将各个应用(模块)的中间数据分类管理好,使更方便,并且可使中间数据将从属于应用模块,不会被其它模块访问到。当有模块修改或下线时,相应的中间数据可以跟随修改,而不必担心被共享而产生的耦合问题。用于生成中间数据的存储过程也可以移到数据库外部,作为应用程序的一部分,同样不会产生耦合问题。

外部来源的中间表也可以减少甚至取消。ETL过程的E、T步骤可以直接在数据库外部由计算引擎实施,在完成清洗转换之后再加载进数据库。E、T步骤中不占用数据库的计算资源,当然也不需要建立中间表来保存这些数据,数据库只要保存最终需要的结果即可。

多样性数据源的数据呈现也可以直接由计算引擎实现数据源和数据库的混合计算,这样就不必将外部数据源导入数据库,有效减少中间表。在数据呈现时由计算引擎临时向数据源发出取数指令以获得最新的数据,还可以获得更好的实时性,而采用中间表方式一般只能定期把外部数据源转入,无法看到最新的外部数据。而且,不将外部数据导入数据库,还能继续利用原数据源的某些优势,比如NoSQL数据库对于按键值查找有很好的性能,还能较好地解决数据结构多样性的问题。另外,专门设计的计算引擎如果再能处理好XML,json这类多层数据,在计算描述上也比传统的关系数据库更有优势。

除了必须的计算能力本身之外,要用于数据库瘦身的计算引擎必须拥有较好开放性和可集成性。

开放性是指计算能力并不依赖于某种存储体系,而可以计算各种来源的数据,比如文件系统中的数据,这样就能利用适合的存储方案来组织管理中间数据。如果计算体系要求特有的数据存储体系(比如数据库),那只是把数据库的臃肿换了一个地方继续臃肿。可集成性是指计算能力可以嵌入到应用程序中,成为应用的一部分,而不能象数据库那样是个独立的进程,这样就不会被其它应用(模块)共享,避免出现应用间的耦合问题。

从这个意义上讲,Hadoop体系(包括Spark)虽然有一定的计算能力,但并不合适充当开放计算引擎的作用。Hadoop有一定的开放性,可以计算体系外的数据,但并不常用,而且性能较差;Hadoop是以独立进程方式运行的庞大体系,基本上没有可集成性,很难完全嵌入到应用程序中。

有了开放可集成的计算能力,相当于实现了计算和存储的分离,在设计应用的体系结构时就会更为得心应手。不必为了获得计算能力而部署多余的数据库或者扩容数据库,让数据库专心做它最合适做的事情,将资源效用发挥到最大。

原文发布时间为:2017-7-18

本文作者:蒋步星

本文来自合作伙伴“数据蒋堂”,了解相关信息可以关注“数据蒋堂”微信公众号

时间: 2024-11-03 19:28:23

【数据蒋堂】第15期:开放的计算能力为数据库瘦身的相关文章

开源大数据周刊-第15期

阿里云E-Mapreduce动态 E-Mapreduce团队 1.4版本(已经发布) 作业运行失败报警 作业并行提交 添加sqoop.shell类型的作业 1.4.1版本(正在研发) 完善失败报警 完善定时任务,增加小时.分钟定时任务 1.5.0版本 (正在研发) 集群整体运行情况的仪表盘 集群状态监控报警 1.5.0版本 交互式查询(支持hive.spark) 资讯 中国大数据发展10大趋势5大挑战 中国大数据发展10大趋势5大挑战,如:大数据的首席数据官开始崛起.可视化推动大数据平民化.智能

开源大数据周刊-第17期

阿里云E-Mapreduce动态 E-Mapreduce团队 1.4版本(已经发布) 作业运行失败报警 作业并行提交 添加sqoop.shell类型的作业 1.4.1版本(已经发布) 完善失败报警 完善定时任务,增加小时.分钟定时任务 1.5.0版本 (正在研发) 集群整体运行情况的仪表盘 集群状态监控报警 1.6.0版本 交互式查询(支持hive.spark) 资讯 大数据投资人必读:中国大数据发展与投资分析报告 随着大数据蕴涵价值的逐步释放,使其成为IT信息产业中最具潜力的蓝海.大数据正以一

开源大数据周刊-第16期

阿里云E-Mapreduce动态 E-Mapreduce团队 1.4版本(已经发布) 作业运行失败报警 作业并行提交 添加sqoop.shell类型的作业 1.4.1版本(正在研发) 完善失败报警 完善定时任务,增加小时.分钟定时任务 1.5.0版本 (正在研发) 集群整体运行情况的仪表盘 集群状态监控报警 1.6.0版本 交互式查询(支持hive.spark) 资讯 Apache Spark 2.0.0 发布,APIs 更新 该版本主要更新APIs,支持SQL 2003,支持R UDF ,增强

【数据蒋堂】第12期:存储过程的利之弊

存储过程是数据库领域中应用非常广泛的技术,关于它的利弊讨论由来已久,我们这里针对存储过程的两个公认度较高的优点进行剖析,从而更清楚存储过程的潜在风险及应用场景. 存储过程利于界面与逻辑分离! 界面与逻辑分离是现代应用开发的一个基本准则.相对于后台数据处理逻辑,界面会有更多样性的环境,如PC.手机等,而且业务稳定性也不强,经常会改.如果能把两者分离,开发和维护界面时绑着数据处理逻辑一起改,成本就低很多. 支持存储过程的观点认为,使用存储过程能实现界面与逻辑分离.存储过程在后台数据库中运算,只要向前

《数据蒋堂》第9期:报表应用的三层结构

在传统的报表应用结构中,报表工具一般都是与数据源直接连接,并没有一个中间的数据计算层.确实,大部分情况下的报表开发并不需要这一层,相关的数据计算在数据源和呈现环节分别处理就够了.不过,在开发过程中,我们发现,有一部分报表的计算即不适合在数据源也不适合在呈现环节实现,这类报表在数量上并不占多数,但耗用的开发工作量占比却很大. 有过程的计算 报表工具都可以完成计算列.分组排序等运算,有些报表工具还提供了跨行组运算和相对格与集合的引用方案,可以完成颇为复杂的运算. 不过,报表工具中的运算是一种状态式的

【数据蒋堂】第3期:功夫都在报表外-漫谈报表性能优化

应用系统中的报表,作为面向业务用户的窗口,其性能一直被高度关注.用户输入参数后都希望立即就能看到统计查询结果,等个十几二十秒还能接受,等到三五分钟的用户体验就非常恶劣了. 那么,报表为什么会慢,又应当从哪里入手进行性能调优呢? 数据准备 当前应用中的报表大都用报表工具开发,当报表响应太慢时,不明就里的用户就会把矛头指向使用报表工具的开发人员或者报表工具厂商.其实,大多数情况报表的慢只是个表现,背后的原因是数据准备太慢,在数据进入报表环节之前就已经慢了,这时再去优化报表开发或压迫报表工具并没有用处

【数据蒋堂】第18期:SQL用作大数据计算语法好吗?

当前的大数据平台在处理结构化数据时大都仍然以提供SQL语法为主流.兼容SQL的好处是很明显的,SQL的应用非常广泛,会SQL的程序员很多,如果继续采用SQL则可以避免许多学习成本.支持SQL的前端软件也很多,使用SQL的大数据平台很容易融入这个现成的生态圈中.大数据平台打算替代的传统数据库也是SQL语法的,这样兼容性会很好,移植成本相对较低. 但继续使用SQL也有缺点,最大的问题就是难以获得大数据计算最需要的高性能. 我们在前面的文章中提到过,SQL中缺乏一些必要的数据类型和运算定义,这使得某些

【数据蒋堂】第14期:计算封闭性导致臃肿的数据库

许多大型用户的数据库(仓库)在运行多年之后,都会积累出很多的数据表,严重者数以万计.这些数据表年代久远,有些已经忘记建设原因,甚至可能已不再有用,但因为很难确认而不敢删除.这给运维工作带来巨大的负担.伴随着这些表还有大量的存储过程仍在不断地向这些表更新数据,占用大量计算资源,经常要迫使数据库扩容. 这些表是真地业务需要吗需要吗?业务会复杂到需要成千上万的表才能描述吗? 有过开发经验的人都知道这不大可能,几百个表就能描述相当复杂的业务了.这些众多的表绝大多数都是所谓的中间表,并不是用来存储基础数据

【数据蒋堂】第31期:JOIN简化 - 维度对齐

那么问题来了,这显然是个有业务意义的JOIN,它算是前面所说的哪一类呢? 这个JOIN涉及了表Orders和子查询A与B,仔细观察会发现,子查询带有GROUP BY id的子句,显然,其结果集将以id为主键.这样,JOIN涉及的三个表(子查询也算作是个临时表)的主键是相同的,它们是一对一的同维表,仍然在前述的范围内. 但是,这个同维表JOIN却不能用上一期说的写法简化,子查询A,B都不能省略不写. 可以简化书写的原因在于:我们假定事先知道数据结构中这些表之关联关系.用技术术语的说法,就是知道数据