海量数据

Druid 驱动海量实时多维分析

旧时模样 提交于 2019-12-05 01:07:38
我今天分享的话题是Druid驱动海量数据实时多维分析。 1、需求背景 首先我来谈一下海量实时多维分析的需求背景,我们广告系统有DSP睿视系统和AD exchange等,前段时间品友的曹老师分享时提到DSP Ad exchange,如果对DSP不了解的同学,可以在百度百科上查一下“互联网广告DSP”,实时竞价是DSP的核心,广告主或者优化师需要动态调整出价优化使收益最大化。 广告主调整出价策略或者投放策略进行优化,想要尽快得到实时的反馈,比如修改了地域定投,实时分地域的竞得率和转化率,甚至是分钟粒度的。在我们的DSP系统中我们提供12种维度(不算多)的多维分析,用户可以任意组合下钻查询。 最初的时候我并不是采用Druid,而是采用Storm+Kafka+Redis实时数据处理,以及hive+mysql的离线处理的Lambda架构架构见下图。 实时数据经过Storm ETL,主要是将不同维度组合作为key,计算metrics以后为value存在redis中。离线数据定时将昨天的数据在Hive中 经过一系列ETL,按照维度组合计算metrics以后将结果存储在mysql中。 采用redis作为实时数据的存储有两个核心问题需要解决: redis不支持range scan,我们需要在app层拼好所有的key,然后调用mget获取,如果执行groupby查询的话例如select area,pv

如何实现海量数据下有序漏斗秒查

核能气质少年 提交于 2019-12-04 18:07:13
近期 易观 公司举办了一个OLAP大赛,我们队伍非常荣幸地获得了第一名,成为本次比赛最大黑马。此篇文章主要分享一下我们是如何解决有序漏斗秒查问题的 比赛地址: 2017易观OLAP算法大赛 参赛情况: https://www.analysys.cn/media/detail/20018458 / 1. 题目分析 : 在以上示例场景下,我们在易观提供的6亿测试数据集上,在4台UCloud云主机(16core,16G ram)机器下从24s优化到了0.5s。而在正式比赛的26亿数据集上,使用相同硬件环境,耗时1.6s。 2. 解题分析: 题目描述的有序漏斗问题可以归结为 带滑动时间窗口的最左子序列问题 , 比如我们需要寻找,2017年7月份中,在3小时的时间窗口下, [A,B,C,D] 漏斗路径下的转化情况, 单个用户只能有 NULL , [a], [A,B], [A,B,C], [A,B,C,D] 五种转化结果,对应的漏斗深度我们称之为 level, 在[A,B,C,D]漏斗路径下, level 的取值可以有[0,1,2,3,4] 四个值,题目的要求即算出所有用户的满足条件下最大 level 汇总结果。 理解问题之后,我们梳理了一下流程图: 我们将问题解决分为5个步骤: filter阶段 :根据时间区间和事件属性对数据进行过滤 group阶段: 根据用户Id进行group汇总

海量数据展示(二)-性能优化

流过昼夜 提交于 2019-12-04 04:44:22
背景     之前做的海量数据数据展示,在预处理速度和在线渲染上还有有所欠缺,本文中进行一些优化工作,使得九分钟处理完一千多万面数据的3-12级矢量切片,在线浏览数据请求时间控制在10s左右。 准备     软件环境:PostGIS(3.0.0rc2 r17909)和 PostgreSQL( 12.0, compiled by Visual C++ build 1914, 64-bit),数据是微软开源的部分房屋数据public.california20191107(10988317条)。 预处理     预处理就是将3级到12级的矢量切片事先切好。首先获取数据12级的最大最小xyz,通过这个范围生成网格,然后和数据相交得到一一对应的网格表public.ca_xyz 。 --经度转切片x CREATE OR REPLACE FUNCTION lon2tile(lon DOUBLE PRECISION, zoom INTEGER) RETURNS INTEGER AS $BODY$ SELECT FLOOR( (lon + 180) / 360 * (1 << zoom) )::INTEGER; $BODY$ LANGUAGE SQL IMMUTABLE; --纬度转切片y CREATE OR REPLACE FUNCTION lat2tile(lat double

elasticsearch字段distinct去重后统计的几种方案和适用场景

匿名 (未验证) 提交于 2019-12-03 00:32:02
为了实现类似等价的sql: SELECT COUNT ( DISTINCT deviceID) FROM t_order_report; 为什么我要说类似等价呢? 因为从精确性、性能等角度还是存在很大的差别! 前置条件, 场景为 : 如果你对去重结果的精准度没有特殊要求,使用cardinality聚合函数 如果你对去重结果要求精确,使用termsagg聚合(类似group by) size(Integer.MAX_VALUE)可以指定桶个数 针对海量数据去重(多桶)场景,方法尝试: 缺点: 性能不达标 总结:目前elasticsearch 对海量数据去重,支持的并不友好,暂无好的解决方案 文章来源: elasticsearch字段distinct去重后统计的几种方案和适用场景

海量数据展示

心不动则不痛 提交于 2019-12-02 11:07:38
背景     现在我们的数据量越来越来越大,往往会有短时间渲染大量数据的要求,但是往往这些数据过大难以实时处理,整体切片花费时间又过长。在这里提出一种缓存加实时处理的方案。 准备     软件环境,PostGIS(3.0.0rc2 r17909)和 PostgreSQL( 12.0, compiled by Visual C++ build 1914, 64-bit),数据是微软开源的房屋数据。PostGIS3.0相对与PostGIS 2.5大幅度提升矢量切片性能,并行环境表现更好。 预处理     预处理就是将3级到12级的矢量切片事先切好。首先获取数据12级的最大最小xyz,通过这个范围生成网格,然后和数据相交得到一一对应的关系表a。     接下来就是使用四叉树键(quadkey),四叉树有一些有意思的特性。第一,四叉树键的长度等于该瓦片所对应的图像级别;第二,每个瓦片的四叉树键的前几位和其父瓦片(上一图像级别所对应的瓦片)的四叉树键相同,下图中,第1级的 '瓦片2' 是第2级的 '瓦片20' 至 '瓦片23' 的父瓦片,第2级的 '瓦片13' 是 第3级的 '瓦片130' 至 '瓦片133' 的父瓦片。通过四叉树的这个特性把3到11级的xyz和11级的xyz建立对应关系表b,最终a和b关联可以得到三到十一级和数据的对应关系。     根据上述内容,我们就可以生成行矢量切片了

移动互联网时代,海量的用户每天产生海量的数量,比如:

佐手、 提交于 2019-12-02 05:10:07
移动互联网时代,海量的用户每天产生海量的数量,比如: 用户表 订单表 交易流水表 以支付宝用户为例,8亿;微信用户更是10亿。订单表更夸张,比如美团外卖,每天都是几千万的订单。淘宝的历史订单总量应该百亿,甚至千亿级别,这些海量数据远不是一张表能Hold住的。事实上MySQL单表可以存储10亿级数据,只是这时候性能比较差,业界公认MySQL单表容量在1KW以下是最佳状态,因为这时它的BTREE索引树高在3~5之间。 既然一张表无法搞定,那么就想办法将数据放到多个地方,目前比较普遍的方案有3个: 分区; 分库分表; NoSQL/NewSQL; 既然一张表无法搞定,那么就想办法将数据放到多个地方,目前比较普遍的方案有3个: 分区; 分库分表; NoSQL/NewSQL; 说明:只分库,或者只分表,或者分库分表融合方案都统一认为是分库分表方案,因为分库,或者分表只是一种特殊的分库分表而已。NoSQL比较具有代表性的是MongoDB,es。NewSQL比较具有代表性的是TiDB。 Why Not NoSQL/NewSQL? 首先,为什么不选择第三种方案NoSQL/NewSQL,我认为主要是RDBMS有以下几个优点: - RDBMS生态完善; - RDBMS绝对稳定; - RDBMS的事务特性; NoSQL/NewSQL作为新生儿,在我们把可靠性当做首要考察对象时

新兵训练营系列课程——海量数据存储基础

Deadly 提交于 2019-11-30 10:40:15
新兵训练营系列课程——海量数据存储基础 2015年8月12日 09:24 阅读 16831 微博平台研发作为微博的底层数据及业务支撑部门,已经经历了 5 年的发展历程。伴随着从数据及业务暴发式增长,我们在海量数据存储方面遭遇了诸多挑战,与此同时也伴随着丰富经验的积累。 本次新兵训练营,受众在于应届毕业生,目的在于让新同学系统化并且有针对性的了解平台的核心技术及核心业务,以使新同学在新兵训练营结束后,能够对平台的底层架构与业务有一定的了解。 本文主要面向新同学介绍平台的核心技术之一——海量数据存储,主要介绍在海量数据存储在大规模分布式系统下的架构变迁与设计。 课程大纲: 1. 课程目标 2. 存储服务概述 3. MySQL 与 MySQL 分布式架构设计 4. Redis 与 Redis 分布式架构设计 5. 思考与讨论 一、课程目标 1. 了解存储服务概况,以及RDBMS及NoSQL的差异 2. 理解MySQL、Redis、HBase基本实现机制、特性、适用场景 3. 理解几种存储产品的大规模分布式服务方案 4. 学会使用平台的MySQL、 Redis client组件 5. 理解对于MySQL、Redis分布式系统设计想要注意的问题 6. 了解平台几种典型案例 7. 理解几种存储产品在平台的定制修改与名词术语 二、存储服务概述 1. 关系型数据库是基于 实体关系模型(Entity

2019秋招复习笔记--海量数据处理

青春壹個敷衍的年華 提交于 2019-11-29 07:06:28
1、海量日志数据,提取出某日访问百度次数最多的那个IP。 来源 算法思想:分而治之+Hash 1.IP地址最多有2^32=4G种取值情况,所以不能完全加载到内存中处理; 2.可以考虑采用“分而治之”的思想,按照IP地址的Hash(IP)%1024值(hash映射),把海量IP日志分别存储到1024个小文件中。这样,每个小文件最多包含4MB个IP地址; 3.对于每一个小文件,可以构建一个IP为key,出现次数为value的Hash map,同时记录当前出现次数最多的那个IP地址; 4.可以得到1024个小文件中的出现次数最多的IP,再依据常规的排序算法得到总体上出现次数最多的IP; 需要注意的是, 相同的IP经过Hash映射之后一定处于同一组中 ,故这种方法一定能统计到出现频率最大的那个IP。 2. 100G的硬盘上的整数型数据, 1G的内存。找出这100G数据里面所有不重复的数据。最少需要多大的辅助内存。 来源:腾讯面试 解法1:位图 int型的整数一共有2 32 个,我们申请2 32 bits, 也就是2 32 位, 用1位表示一个数是否出现了,0表示未出现,1表示出现了。比如4出现了,我们将这2 32 位的第4位置为1。10000出现了则把第10000位置为1。这样2 32 bits = 2 32 /8 = 2 29 B, 我们知道2 10 约等于1000, 2 30

社会化海量数据采集爬虫框架搭建

*爱你&永不变心* 提交于 2019-11-28 11:31:29
随着BIG DATA大数据概念逐渐升温,如何搭建一个能够采集海量数据的架构体系摆在大家眼前。如何能够做到所见即所得的无阻拦式采集、如何快速把不规则页面结构化并存储、如何满足越来越多的数据采集还要在有限时间内采集。这篇文章结合我们自身项目经验谈一下。 我们来看一下作为人是怎么获取网页数据的呢? 1、打开浏览器,输入网址url访问页面内容。 2、复制页面内容的标题、作者、内容。 3、存储到文本文件或者excel。 从技术角度来说整个过程主要为 网络访问、扣取结构化数据、存储。我们看一下用java程序如何来实现这一过程。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 import java.io.IOException ; import org.apache.commons.httpclient.HttpClient ; import org.apache.commons.httpclient.HttpException ; import org.apache.commons.httpclient.HttpStatus ; import org.apache.commons.httpclient.methods.GetMethod ; import org

分布式系统与海量数据处理

怎甘沉沦 提交于 2019-11-28 04:30:12
科技发展带来的挑战 在科技的快速发展推动下,在 IT 领域,企业会面临两个方面的问题。 一是如何实现网站的高可用、易伸缩、可扩展、高安全等目标。为了解决这样一系列问题,迫使网站的架构在不断发展。从单一架构迈向高可用架构,这过程中不得不提的就是分布式。 二是用户规模越来越大,由此产生的数据也在以指数倍增长,俗称数据大爆炸。海量数据处理的场景也越来越多。技术上该如何面对? 分布式系统 概述 分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅。 仅通过消息传递进行通信和协调的系统。简单来说就是一群独立计算机集合共同对外提供服务,但是对于系统的用户来说,就像是一台计算机在提供服务一样。 分布式意味着可以采用更多的普通计算机(相对于昂贵的大型机)组成分布式集群对外提供服务。计算机越多,CPU、内存、存储资源等也就越多,能够处理的并发访问量也就越大。 初代的 web 服务网站架构往往比较简单,应用程序、数据库、文件等所有的资源都在一台服务器上。 图:互联网初始阶段的网站架构 图:现在互联网网站常用的架构 图:现在互联网网站常用的架构 从分布式系统的概念中我们知道,各个主机之间通信和协调主要通过网络进行,所以,分布式系统中的计算机在空间上几乎没有任何限制,这些计算机可能被放在不同的机柜上,也可能被部署在不同的机房中,还可能在不同的城市中