日期:2014-05-16 浏览次数:20451 次
最近做的项目中涉及到大数据量的问题,具体问题是:监测数字电视的信号,对传输的码流进行指标监测,每秒监测到20000个流,每个流对应着20多个指标,每秒存储一次将这20000流存储起来,需要保存24小时的数据。
这个问题研究了好几天:
一、文件写入存储:但是如果将一天的17亿条记录都写入到一个文件里,没试过,相信会很慢,而且查询的时候会更慢。如果写入到多个文件,按照流ID可以将数据拆成20000个分类,同时对20000个文件执行写入操作也不现实。
二、数据库存储:文件存储的方式pass掉了之后开始考虑数据库存储
1、首先我用的Oracle进行性能测试:
将表按照流ID进列表分区,分为20000个区,然后每个分区内存储86400条数据(也就是该流从一天的第1秒到86400秒对应的指标数据),需要有索引,主键是全局索引,其余的列我又建了4个分区索引。
第一步创建6个表空间,保证每个表空间都能拓展到32GB大小(Oracle的表空间最大能拓展到32GB)
第二步要创建这个分区表:
-- Create table create table AAA ( ID number(8), StreamID number(8), StreamType number(1), FAvailability number(5), Bandwidth number(4), ValidBandwidth number(4), MDI_DF number(5), MDI_MLR number(5), Delay_Time number(5), IPInterval number(5), IPJitter number(5), Time date, MLT15 number(5), MLT24 number(5), MLS number(5), SliceNum number(5), CachedTime number(5), StuckTime number(5), GetSliceErr number(5), RetransmitRate number(5), RepeatRate number(5), SecondsFlag number(5) ) partition by list(SecondsFlag) ( partition p1 values(1) tablespace tbs_haicheng );
DECLARE parName varchar2(100); sql_str varchar2(500); BEGIN FOR I IN 2..20000 LOOP parName:='p'||I; sql_str:='ALTER TABLE aaa ADD partition'||' p'||I|| ' VALUES('||I||')'; execute immediate sql_str; END LOOP; END;
-- Create/Recreate indexes create index LOCAL_INDEX_REPEATRATE on AAA (REPEATRATE); create index LOCAL_INDEX_SECONDSFLAG on AAA (SECONDSFLAG); create index LOCAL_INDEX_STREAM on AAA (STREAMID); create index LOCAL_INDEX_TIME on AAA (TIME);
第五步创建一个表结构与t_stream相似的表:
create table a ( ID number(8), StreamID number(8), StreamType number(1), FAvailability number(5), Bandwidth number(4), ValidBandwidth number(4), MDI_DF number(5), MDI_MLR number(5), Delay_Time number(5), IPInterval number(5), IPJitter number(5), Time date, MLT15 number(5), MLT24 number(5), MLS number(5), SliceNum number(5), CachedTime number(5), StuckTime number(5), GetSliceErr number(5), RetransmitRate number(5), RepeatRate number(5), SecondsFlag number(5) )
partition by list (SECONDSFLAG) ( partition P1 values (1) tablespace IPVIEW1