最近在做一个项目时遇到一个问题,是关于大数据量的数据,具体为一个800亿的轻度汇总数据,去关联一个7亿左右的另一个轻度汇总数据。
主要遇到的问题有:
1,800亿的轻度汇总数据读写困难,耗费时间、资源大;
2,两表进行关联处理数据计算慢。
背景:(完全假设来说)
A表是以用户、城市维度的出现次数数据,字段主要有uid、city_id,cnt
B表是以用户、城市维度的出现次数标准数据,字段主要有uid、city_id,city_cnt
主要是求用户是否在某个省份达到出现次数标准的进度,比如说小明在济南出现2次,在青岛出现5次,
但是在济南出现的标准次数应该为4次,在青岛出现的标准次数为4次。所以在山东出现的标准次数为8次,而小明达标的次数分别为2次和4次(超过标准按照标准统计),所以小明在山东出现的次数进度为67%。
针对以上数据量,目前想到的方案有以下三种:
方案一:拆分数据、分散资源,建立多个计算task
(1)由于目的是对用户进行统计,所以对A、B表以及目标表根据uid首位数字设置分区,将数据量拆分;
首先需要对uid首位数进行数据量查询,然后按照数据量的大小进行合理分配分区。
(2)根据分区建多个task,跑入对应目标表的分区;
对相同分区下的用户数据进行数据计算,然后建立多个task进行跑数,分散资源。
方案二:维度进行高粒度汇总,减小数据量