日期:2014-05-20  浏览次数:20729 次

大数据量处理,牛人进(主要讨论优化思路)
  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就好了,每天晚上运行





------解决方案--------------------
按月做视图吧
将你查询的数据做个视图吧
数据再大可以考虑按天做视图
查的时候再视图里查