请教关于大数据量(每天约 1000 万)的统计操作优化方法。

2016-10-31 11:56:52 +08:00
 enjoyhot

mysql 示例: select a,count(distinct b) as num from table where c between time1 and time2 group by a order by num desc limit N;

要做的是线上事务处理,一般 time1 和 time2 是自由选择,单位是天,考虑到了数据量增长快,时间阔度的自由选择将导致查询越来越慢。

目前采用 phoenix+hbase 的方式查询,用一天的数据做测试,效果不是很好,约( 40s ),请教有什么好的方法,提高在线查询的效率。

目前想到方案有: hbase 继续保持原数据,利用 hadoop 等工具离线统计最终需要的信息,将统计信息保存到 mysql 或 hbase 中,再由 web 查询。不知道这种方法是否可行?如果可行, mysql 或 hbase 应该如何设计才会更好,最终做到点击响应延迟尽量小。

15421 次点击
所在节点    MySQL
26 条回复
liprais
2016-10-31 23:29:44 +08:00
@liprais 性能不好先做 benchmark 看看瓶颈在哪
Actrace
2016-11-01 08:54:41 +08:00
一般来说瓶颈可能在数据库的计算那块,即出数据。
但是楼主没有给多少业务过程的耗时数据,所以也就无从考量了。
enjoyhot
2016-11-01 19:38:43 +08:00
@wmttom 感谢回答。对 elasticsearch 不了解,不过似乎是搜索引擎方面的,“存 Hive 按照天的分区表, spark 跑数据存 MySQL 或者 HBASE ”是指利用 spark 调用 hive 进行 mapreduce 操作存入数据库吗。对于第二种需求,根据其它人的评论,我觉得应该属于大多人的做法,准备尝试。
enjoyhot
2016-11-01 19:42:12 +08:00
@ebony0319 有尝试索引的方式,但免不了的全表扫描是硬伤,所以感觉还是修改业务,采取离线计算,再统计展示好一些。
enjoyhot
2016-11-01 19:44:20 +08:00
@liprais 目前就是用这种方法,根据官网 http://phoenix.apache.org/performance.html 性能对比,感觉略吊,所以试了一试。
wmttom
2016-11-01 21:01:45 +08:00
@enjoyhot 这里说的 Hive 意思主要是指用 Hive 作为 SQL on Hadoop 的 metadata ,本质上所有的 Hive 表都是 HDFS 上的文件, Impala 、 Spark df 可以共享 Hive 的 metadata 来把 HDFS 文件当做建好的表跑 SQL 。需求并不是非常复杂的话可以纯 SQL 搞定,比如每一个任务都是一个 Hive 的 SQL ,从一个 Hive 表生成另一个 Hive 表,然后用 sqoop 之类的工具把这张结果 Hive 表导入 MySQL 供数据后台查询。复杂的需求可以通过 Hive UDF 之类的搞定,也可以去写 spark 任务, mapreduce 写起来会比较繁琐, spark rdd 的接口相对简单些。
elasticsearch 自己给自己的定义除了搜索,还有数据分析引擎。很适合做数据量不是非常大情况下的实时全维度数据分析,说白了任意维度数据分析需要所有字段都带索引, es 又封装好了常用统计方法,用起来正合适。一个搞过的实践是当日数据使用 es 实时分析,之前数据离线处理,因为一般离线处理都在凌晨跑,看不到当日数据。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/316742

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX