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. JQuery利用选择器定位动态id?

    假如我们需要去定位一个动态生成的div,我们需要为它指定一个动态的id 例如: 前台使用EL进行迭代LIST生成div,为其添加动态的id,生成之后变成下面样式 <div id="tz ...

  2. 22 nginx配置与集群

    一:编译nginx ,并配置 Cd /app/pcre-8.12 ./configure Make && make install Cd nginx-1.2.7 ./configure ...

  3. Mysql 索引增加与删除

    [1]索引 索引,通俗理解,即目录. 之前说过,计算机是对现实世界的模拟.目录应用在数据库领域,即所谓的索引. 目录的作用显而易见,所以建立索引可以大大提高检索的速度. 但是,会降低更新表的速度,如对 ...

  4. Jquery获取iframe中的元素

    iframe与父页面之间相互获取元素的方法: 1.从父页面中获取iframe页面中的元素: 用法: $(window.frames["iframe_include_adverse" ...

  5. 公网yum 源地址

    1. centos5.*  公网yum 源地址 [root@web ~]# cd /etc/yum.repos.d/[root@web yum.repos.d]# wget -O /etc/yum.r ...

  6. Circling Round Treasures CodeForces - 375C

    C. Circling Round Treasures time limit per test 1 second memory limit per test 256 megabytes input s ...

  7. python知识点导图(搜集)

    第一章 基本环境 第二章 内置类型 第三章 表达式 第四章 函数 第五章 迭代器 第六章 模块 第七章 类 第八章 异常 第九章 装饰器 第十章 描述符 第十一章 元类 第十二章 标准库 Re模块 附 ...

  8. AWS:5.公有云编程

    主要内容 1.AWS接口 2.使用AWS命令行 3.使用python sdk编程 AWS接口 Console:web控制台 登录amazon后在"我的账户" -> AWS管理 ...

  9. 【题解】POJ1934 Trip (DP+记录方案)

    [题解]POJ1934 Trip (DP+记录方案) 题意: 传送门 刚开始我是这么设状态的(谁叫我DP没学好) \(dp(i,j)\)表示钦定选择\(i\)和\(j\)的LCS,然而你会发现这样钦定 ...

  10. ajax实时获取下拉数据

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ajax ...