http://2017.qconbeijing.com/presentation/646?utm_source=weibo&utm_medium=infoq&utm_campaign=yj

专题演讲嘉宾 :易杰

腾讯社交与效果广告部检索系统组主管

    在腾讯工作 10 年,一直从事效果广告的研发工作,对互联网广告及精准推广有较深理解,具备优秀的互联网海量运营经验。
现负责腾讯社交广告平台百亿级广告引擎系统,OLAP 系统 PivotEngine 等。

SPA 自研 PivotEngine 可以在 2 秒内完成。

数据是很多业务的核心驱动力之一。对于“SPA”这样的广告业务,更是如此。几十亿用户,每天几百亿次曝光,都产生大量的数据。对这些数据进行透视分析,发现其中蕴含的一些高层宏观信息,对于广告主以及我们自己的产品、运营、策略开发等人员的决策都能提供指导和帮助。

比如广告主投放一条广告,他想了解浏览了其广告的这批用户的年龄是个什么样的分布,更进一步地,其想对比一下曝光用户和有点击行为的用户,比如曝光中 25 岁的用户占比是 10%,但是点击中 25 岁的用户占比却高达 15%。

对于运营来说,他们可能想了解一段时间整个系统中获得不同曝光次数的用户的占比、点击率、产生的收入等。比如最近 10 天内产生 1 次曝光的用户的数量、平均点击率、收入,2 次曝光用户的数量、平均点击率、收入等。

对于广告主的这种简单需求,通过 SQL 可以这样得到结果:

select age, count(*) from log where advertiser_id=xxx group by age

对于后面那种按曝光量聚合统计的需求来说,假设每条曝光日志作为一条基本的数据,那么 sql 大概是如下这种形式的两层 GROUP BY 嵌套查询:

SELECT
exposure_num,
COUNT(*) as user_num,
SUM(sum_click) / SUM(exposure_num) as click_rate,
SUM(sum_cost) AS total_cost
FROM
(SELECT
qq,
COUNT(*) AS exposure_num,
SUM(click_count) AS sum_click,
SUM(cost) AS sum_cost
FROM
log_table
GROUP BY qq) temp_table
GROUP BY exposure_num;

如果只有几十万或几百万条数据,也许 mysql 就可以很好的解决这个问题。但是当数据规模达到几十亿、几百亿甚至上千亿时,mysql 就无法处理了。此外 mysql 一行数据在一列上只能取一个值,但是对于一个用户来说,其某个属性可能是多值,比如用户的商业兴趣,会有多个值。这时按照“商业兴趣”这一列进行 group by,mysql 也无法或者不方便处理。

为了高效低成本地支持这种简单的“过滤-聚合”模式,也即“where-group by-(count|sum|avg) ”这种模式的查询分析请求,当然易用也是非常重要的,我们自研了一套在线查询分析引擎“PivotEngine”。

演讲:对 2000 多亿条数据做一次 group by 需要多久?的更多相关文章

  1. net.sz.framework 框架 ORM 消消乐超过亿条数据排行榜分析 天王盖地虎

    序言 天王盖地虎, 老婆马上生孩子了,在家待产,老婆喜欢玩消消乐类似的休闲游戏,闲置状态,无聊的分析一下消消乐游戏的一些技术问题: 由于我主要是服务器研发,客户端属于半吊子,所以就分析一下消消乐排行榜 ...

  2. 亿条数据在PHP中实现Mysql数据库分表100张

    当数据量猛增的时候,大家都会选择库表散列等等方式去优化数据读写速度.笔者做了一个简单的尝试,1亿条数据,分100张表.具体实现过程如下: 首先创建100张表: $i=0; while($i<=9 ...

  3. 1亿条数据在PHP中实现Mysql数据库分表100张

    当数据量猛增的时候,大家都会选择库表散列等等方式去优化数据读写速度.笔者做了一个简单的尝试,1亿条数据,分100张表.具体实现过程如下: 首先创建100张表: $i=0; while($i<=9 ...

  4. PostgreSQL中COUNT的各条件下(1亿条数据)例子

    test=# insert into tbl_time1 select generate_series(1,100000000),clock_timestamp(),now(); INSERT 0 1 ...

  5. Java备份约9亿条数据

    需求:有一张表9亿多条数据,数据加索引总数据量61GB.考虑到这张表的大部分数据都不会再被使用并且大数据量可能影响整库的性能,所以决定将表里某一个时刻之前的数据备份到一张新表中,待备份完成后将旧表中已 ...

  6. oralce 超过1亿条数据的数据库表清理实践

    2018-08-18 16:58 无腿鸟 阅读(331) 评论(0) 编辑 收藏 问题:当一个表的数据量超过一亿条,要删除其中的5000w条,如何处理. 如果直接使用delete语句,会涉及到到大量的 ...

  7. 过千万、亿条数据的mysql表更新 mysql 线程状态

    分段更新 UPDATE question SET `status`=1 WHERE status!=1 LIMIT 3000;UPDATE answer SET `status`=1 WHERE st ...

  8. 超过70亿条数据的mysql 去重

    1.数据库层面: 2.业务层面:接口去重.浏览器显示端去重:

  9. mysql 造1亿条记录的单表--大数据表

    读写文件 背景及木:现有数据1000w单表,为压力测试准备1亿条数据. 步骤: 1.将1000w条记录,除id外都导入到多个文件中: //DELIMITER DROP PROCEDURE if EXI ...

随机推荐

  1. Python 时间格式化(转)

    From:http://www.cnblogs.com/65702708/archive/2011/04/17/2018936.html http://www.wklken.me/posts/2015 ...

  2. ios math.h 常用数学函数

    1. 三角函数  double sin (double);正弦  double cos (double);余弦  double tan (double);正切  2 .反三角函数  double as ...

  3. NuGet管理工具安装

    安装完成后VS重启即可

  4. python 基础 7.1 datetime 获得时间

    一 datatime 的使用   object         timedeta         tzinfo         time         data                dat ...

  5. Vector 源码阅读

    Vector在功能上与ArrayList是类似的,实现的数据结构也是一样的.但Vector是线程安全的,ArrayList是线程不安全的.

  6. linux c编程:进程间通信

    进程间的通信包括管道,共享内存,信号量通信,消息队列,套借口(socket)和全双工管道通信 首先来看下管道的用法:管道顾名思义,就如同下水道管道一样,当从管道一端流水到另一端的时候,水流的方向是单方 ...

  7. Map总结--HashMap/HashTable/TreeMap/WeakHashMap使用场景分析(转)

    首先看下Map的框架图 1.Map概述 1.Map是键值对映射的抽象接口 2.AbstractMap实现了Map中绝大部分的函数接口,它减少了“Map实现类”的重复编码 3.SortedMap有序的“ ...

  8. opencv轮廓提取、轮廓识别相关要点

    1.轮廓提取 src = cv2.imread("***.jpg", cv2.IMREAD_COLOR) gray = cv2.cvtColor(src ,cv2.COLOR_BG ...

  9. 构建工具是如何用 node 操作 html/js/css/md 文件的

    构建工具是如何用 node 操作 html/js/css/md 文件的 从本质上来说,html/js/css/md ... 源代码文件都是文本文件,文本文件的内容都是字符串,对文本文件的操作其实就是对 ...

  10. ansible mysql模块的使用今年

    摘自: https://www.ibm.com/developerworks/cn/linux/1502_lih_ansible/