几条简单SQL的系统级抽象

前言

做Java技术的同学,对于SQL应该还是比较熟悉的,统计函数中,count、sum、avg、max、min相信都不陌生,最近在做日志分析以及实时计算的工作中,如果抽象一套系统来做日志文件的处理的话,实际上SQL中的这几个统计函数,是非常好的模型基线,为什么这么说呢,下面通过举例,注入深入看看。

最常见的统计SQL

  • 统计总数 select count(*) from info;
  • 对特定字段求和 select sum(age) from info;
  • 对特定字段求平均值 select avg(age) from info;
  • 对特定字段求最值(max、min) select max(age) from info;select min(age) from info;
  • 这几个统计函数,都是对于特定的数据集合,这里可以认为是所有的数据,进行的统计,求和,求平均值,计数,最大最小值等,这里做抽象,数据来源的抽象;
  • SQL统计的是数据库的数据,假如我现在是应用系统来处理数据,那么数据来源就可以是“DB中的数据,日志数据等等”

##高阶进化阶段

  • 高阶一 添加过滤条件select count(*) from info where age>23;
    这里最典型的,添加过滤条件,在SQL中是通过where进行过滤的。
  • 高阶二 添加聚合条件select count(*) from info group by age; 这里添加聚合条件,在SQL中是通过group by来进行聚合的。
  • 如何解析不规则文本
  • 如果要把不规则的一行文本(在java中,最典型的是一行日志信息),这时候正则表达式就有了很大的用户,通过特定的符号进行切割,切割后的数据,就类似数据库中的一行记录;
  • 这里再找我介绍一个AWK,linux控制台命令中解析文本的一个强悍的工具,至于工具的强悍情况,这里不做展开,重点介绍一下他的模型。
  • awk ‘{pattern + action}’ {filenames}尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 pattern就是要表示的正则表达式,用斜杠括起来。这样看下来,AWK在处理文本的时候,做了两个高阶抽象,一个是匹配模式,一个是匹配到数据之后的处理,剩下的就是基于这两个基础上的丰富了,简单强悍且非常易于理解。

系统级抽象

  • 背景介绍
    • 需要针对数据库中的数据,以及java中的日志文件数据做统计分析;
    • 数据库中存储的是业务性比较强,需要持久化存储,且后续会长期使用的,日志中的数据可能持久化存储需求没那么强烈,但是有分析统计的需求,例如针对特定问题或者特定场景的数据埋点;
    • 从统计的角度看,其实我们平时遇到的大多数统计需求,计数、求和、求平均,求最值,应该可以覆盖80%左右的需求;
    • 从上面这一条看,这五个统计模型,可以重度借鉴SQL的统计模型;
  • 模型高阶抽象

    • 模型分为四个核心部分,统计函数文本解析过滤条件聚合条件
    • 文本解析,接触AWK的pattern和action模式,可以再借助正则表达式来进行功能增强;
      • 负责不规则文本的解析,转换为相对比较规整的数据,必须回到的模块;
    • 统计函数,这个比较好理解,就五个,多了不支持,count,sum,avg,max,min;
      • 负责数据的计算,必须用到的模块;
    • 过滤条件,借鉴SQL中的where,针对特定行数据的过滤,特定属性的= ,!=,<,>;
      • 负责解析后的结构化数据的过滤筛选,可能用到的模块;
    • 聚合条件,借鉴SQL中的group by ,针对数据集合进行分组聚合;
      • 负责分组聚合,可能用到的模块;## 写在最后
  • 这里仅仅是针对过程的抽象描述,真正落地到系统中,还有很多事情要去做;
    • 构建操作控制台来界面化用户的操作和配置;
    • 需要针对DB和服务器日志数据的收集;
    • 需要构建强悍的文本解析器;
    • 数据分析过程需要解决大数据量,高并发情况下的问题;
    • 数据分析的结果,需要能够支持快速的查询;
    • 如果想对于分析后的统计结果数据可视化,还需要能够灵活动态配置图表;
  • 有了这些结果,我们还能做哪些事情
    • 看,如果获取数据能够非常方便的得到,那么对于大家了解自己的系统,了解业务,帮助非常大;
    • 监控报警,有了统计数据,再加上同比和环比维度,那么,是不是就可以报警了;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值