mysql 百亿级_ES实现百亿级数据实时分析实战案例

本文介绍了如何处理百亿级别的数据实时分析需求,通过选择将数据存储在ES中并利用其聚合能力,实现秒级响应。在Spark处理原始数据后,按照实验+小时分索引存入ES,当用户请求时,异步任务并行从ES获取并聚合数据,最终提供良好的用户体验。
摘要由CSDN通过智能技术生成

背景

我们小组前段时间接到一个需求,希望能够按照小时为单位,看到每个实验中各种特征(单个或组合)的覆盖率、正样本占比、负样本占比。我简单解释一下这三种指标的定义:

覆盖率:所有样本中出现某一特征的样本的比例

正样本占比:所有出现该特征的样本中,正样本的比例

负样本占比:所有出现该特征的样本中,负样本的比例

光看这三个指标,大家可能会觉得这个需求很简单,无非就是一个简单的筛选、聚合而已。

如果真的这么简单,我也没必要写这篇文章单独记录了。问题的关键就在于,每小时有将近1亿的数据量,而我们需要保存7天的数据,数据总量预计超过了100亿。

技术方案

在了解清楚需求后,我们小组马上对技术方案展开讨论,讨论过程中出现了3种方案:

第一种:用Spark流式计算,计算每一种可能单个或组合特征的相关指标

第二种:收到客户端请求后,遍历HDFS中相关数据,进行离线计算

第三种:将数据按照实验+小时分索引存入ES,收到客户端请求后,实时计算返回

首先,第一种方案直接被diss,原因是一个实验一般会出现几百、上千个特征,而这些特征的组合何止几亿种,全部计算的话,可行性暂且不论,光是对资源的消耗就无法承受。

第二种方案,虽然技术上是可行的,但离线计算所需时间较长,对用户来说,体验并不理想。并且,为了计算目标1%的数据而要遍历所有数据,对资源也存在很大浪费。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值