一个技术问题和大家交流一下,求高手解答:
有一个需求,目前想到用数据库表来保存,数据量较大一天的数据量在1千万左右复合主键
time(bigint) +  key1(VARCHAR) + key2 (VARCHAR) +key3(INT) + key4(BIGINT) 以上这些构成复成主键字段+其它指标字段
按时间保存,一天的数据量在一千万左右,要求保存三个月左右的历史数据,现在担心数据量是否太大,而导致后面查询无法进行。按90天计,大概9亿条数据左右。后面业务可能需要进行sum求和之类的耗时操作以上的数据初步想用数据库表保存,但不限于用表保存,请大家帮忙看看如何保存会比较好。

解决方案 »

  1.   

    这个数据量是比较大,但也不是少见。
    关键看你的需求如何,比如:你说要sum,按照什么条件sum?
    用的什么库?除了用表保存,你有更好的选择吗?
      

  2.   

    time保存的是什么类型的日期格式呢?
    可以考虑rang(月)-rang(天)复合分区,这样利用分区消除的话,就相当于直接操作一天的数据了。
    如果只有1个时间字段的话,可以考虑虚拟列。
      

  3.   


    time保存的是long时间戳
    但time是每5分钟保存一条的,以天为分区是否合适?
      

  4.   


    后面可能还有group by 操作,这个能行得通吗?
    时间粒度如何确定比较好?
      

  5.   

    具体分区策略和分区粒度,直接和你的具体SQL相关。
    例如:SQL条件是什么,条件的时间跨度是多少等。
    像楼主说的,1000万条数据分组很慢,关键看慢在了哪里。
      

  6.   

    像group by ,sum这种操作主要性能在IO端,不是在计算上?
      

  7.   

    group by ,sum这种操作,看具体的配置,如果内存不够,那么就会用到IO,就是会把中间结果暂时放到硬盘上存储。