实时统计分析技术主要是为了满足数据应用中大家对数据的变化情况有一个较高时间灵敏度需求的情况。应用要求能够近乎及时的反映数据的整体变化情况。那么实时统计分析的核心关键点是实时性,也就是性能。其还伴有另一个明确的特征,就是对于要统计的内容是十分明确的。
传统上,我们的数据统计分析方法是在一个关系数据库中创建表,然后将数据存储到表中。最后利用SQL语句从数据库中统计获得自己需要的统计结果。以此为基础的实时统计分析方案为为设置一个调度计划,定期调度SQL语句对数据表进行周期性的统计,并保存统计结果到另外一张表。这个周期的选取经常让我们头疼不已,周期太小,数据库压力太大会影响到其它业务,但统计结果的实时性高,应用效果好;周期太大,数据库压力相对较小,但统计实时性较差,应用效果也较差。另外,在这样的技术实现中,会伴有大量的磁盘IO操作,性能会有损失,且只能得到一个准实时的统计效果。
随着开源或商用的内存数据库,如MemSQL、VoltDB、eXtremeDB、SQLLite等,的大量涌现,实时统计分析技术应来了新的春天。数据可以暂时存储到内存数据库中,然后定期持久化到磁盘中;或者数据一直驻留在内存数据库中。系统依然采用定期执行SQL的方式对内存数据库中的数据进行统计。由于数据驻留在内存,磁盘IO的消耗不存在了,性能有了极大的提升。这也使得我们对于调度周期的选取变得不那么困难。统计的实时性也得到了提高。
内存数据库的出现对于实时统计分析技术有了很大的改观,但其实现没有摆脱传统的任务定期调度的方式。编程的程序控制复杂度也相对较高。而一款新的、基于内存统计分析的开源工具MOQL(基于JAVA)的出现为实时统计提供了更多的选择。MOQL与SQL语法兼容,但其不依赖于任何一款数据库,也就是其没有事务的概念。它可以对内存中的任何对象进行统计分析,而不关心对象的存储方式。它与传统基于数据库的实时统计分析在实现原理上存在差别。传统的基于数据库的统计分析中,数据如同流淌在管道中的水,而数据库相当于一个蓄水池。我们等水流入蓄水池并达到一定量的时候,再用滤网对水池中的水进行过滤,捞取我们想要的信息,我们可以重复多次捞取;而MOQL解决实时统计的思路就好像直接为水管设置了滤网,水只要从管道中流经就会被实时的过滤,并获取结果,几乎没有延时。另外,可以通过设置多层滤网的方式对数据进行多层过滤,获得不同的过滤结果。
这两种实时统计分析方法各有各自的优缺点,在此不做详细比较。在选取开发实时统计分析的相关技术时,性能、编程复杂度等在不同的应用场景下拥有不同的选取策略,需权衡考虑,无法一概而论。
(有兴趣了解MOQL的读者可以看我的微薄中关于MOQL的文章)
作者:colorknight 发表于2013-5-22 8:40:32
原文链接