大数据量处理,牛人进(主要讨论优化思路)
SQLService 数据库
有一个表,每天插入的数据量大概是百万级,10天能有两千万的数据,这个数据量每天都按照这个级别增长,不会删除数据。里面常用的 字段是: 用户ID、手机型号、手机操作系统版本、登陆日期、来源IP、登陆程序(QQ、微信等)、来源渠道(UC浏览器、91助手等)、来源子渠道。大概这些字段。
目前有2个需求:
1:按照时间或者某个字段查询 (现在已经在常查询的字段建了 非聚集索引)
2:按照统计查询:比如统计 UC浏览器 QQ 的登陆次数 (目前是这个需求,个人认为 后续会增加 UC浏览器+手机型号+QQ 的登陆次数 等)
根据这2个需求,目前想到2点,1把数据每个月导到另一张表,只能让他查询1个月内的数据以及统计,但是被PASS掉了。
2准备单独创建一张表,每天统计一次,把可能会出现的几个常用字段,都放在统计表 比如 来源渠道、登陆程序、登陆次数、用户ID、手机型号。 这样的话 SQL不必在海量数据里面去运算,根据时间查询统计表就能得到结果。但是缺点是 扩展性有局限,如果改变查询方式,就需要改变统计表。
哪位牛人还有更好的方法。感谢
------解决方案-------------------- 2准备单独创建一张表,每天统计一次,把可能会出现的几个常用字段,都放在统计表 比如 来源渠道、登陆程序、登陆次数、用户ID、手机型号。 这样的话 SQL不必在海量数据里面去运算,根据时间查询统计表就能得到结果。但是缺点是 扩展性有局限,如果改变查询方式,就需要改变统计表。
==》
支持这个,
不过像你说的一样,有局限性,
------解决方案--------------------1)按照时间或者某个字段查询 明细查询
10天2千万数据有点大,你使用了
分区表了吗,这个应该可以提高查询速度
------解决方案--------------------2)按照统计查询
搞清楚需求 会不会根据 用户ID,来源IP统计,如果不需要就很简单了
建立一张表
日期 手机型号、手机操作系统版本 来源IP、登陆程序 、来源渠道、来源子渠道,
个数
插入数据就统计结果
如下:
2012-01-01 手机型号1、手机操作系统版本1 来源IP1、登陆程序1 、来源渠道1、来源子渠道1 7个
2012-01-01 手机型号1、手机操作系统版本1 来源IP1、登陆程序1 、来源渠道1、来源子渠道2 8个
就是所有不同类型组合一条数据,这样统计就很简单了
------解决方案--------------------建议给你的表分区,并且定期统计一次数据存起来作为查询使用。
------解决方案--------------------无论在怎么区分,你查询的基数一直是在增长,每次查询都是在海量的基数中去查
如果能动态的创建表,根据每天的数据来建表,可能会好点.
------解决方案--------------------1.按照日期动态创建表,比如:每3天自动创建一张表,表名按照小时生成
或者:按照数据量建立一个触发器,每到1000万以上的数据,自动生成一张表,或者按手机型号啊什么的分表
2.生成表时,像索引表中插入数据描述,例如表名是:201209121800数据,100万条数据,手机型号的取词,等等,既:在建一张元数据表,记录这张表的名称,检索字段的关键词【类似于数据仓库的概念】
3.在多个表中建立联合索引,根据查询条件进行union时间段内的数据表
4.数据库中建立job用,直接生成统计数据
如果你说的查询仅仅就是为了统计,做个job就好了,每天晚上运行
------解决方案--------------------按月做视图吧
将你查询的数据做个视图吧
数据再大可以考虑按天做视图
查的时候再视图里查