最近有一个项目,要用oracle存储一个通讯系统所有流经的数据包,设计存储容量1T,raid0+1硬盘,数据按时间轴增长,那么如何设计存储结构,才能保证存储查找效率以及可靠性等(通常是不断监控并且写入,有时需要按时间查询,超过容量或时间后把最旧的数据删除)。我们考虑采用以下一些oracle设置:
1)使用归档模式
2)数据存储在专用表空间
3)使用序列做主键
4)使用存储过程提高写入效率等
5)数据表和索引分离存储到不同表空间问题是:
1)采用归档模式后,可靠性得到加强,但大量的日志文件占用存储空间,会否影响硬盘容量?
2)是否有必要使用动态生成新表来存储数据的方式,这个会否提高后来的查询删除效率,它同时提高了控制的复杂度,是否有价值?
3)这种数据以二进制存储还是转为字符串存储好?
4)表空间数据文件怎么设置为好?需要保证:
1)写入性能
2)可靠性
3)查询效率系统:
Windows 2003 Server
Oracle 10g通信服务开发:
C++、ACE请教高手,这种情况下通常采用什么存储结构为好,怎样保证应用系统(主要是保持监控连接和插入数据)的性能和可靠性,请有经验的达人赐教。

解决方案 »

  1.   

    1)采用归档模式后,可靠性得到加强,但大量的日志文件占用存储空间,会否影响硬盘容量? 
       ANSWER:   这个我觉得可以不用担心,在不行用磁盘阵列,那总够用了吧!
    2)是否有必要使用动态生成新表来存储数据的方式,这个会否提高后来的查询删除效率,它同时提高了控制的复杂度,是否有价值? 
      ANSWER:   建议不用要动态表生成!因为考虑数据量日后越来越多,要提高查询效率可以建分区表等
    3)这种数据以二进制存储还是转为字符串存储好? 
      ANSWER:   个人认为用字符比较好!
    4)表空间数据文件怎么设置为好? 
      ANSWER:   表空间设置为手动增加!不要设置增长!
      

  2.   

    range partition+ hash subpartition
      

  3.   

    在磁盘陈列中,对数据库来说,0+1是最好的选择方式了。如果可以,关于raid,给你两个建议:
    1. 直接使用祼设备
    2. 条块化(stripping)关于其他问题,做一下简要回答:
    1)采用归档模式后,可靠性得到加强,但大量的日志文件占用存储空间,会否影响硬盘容量?
        答:归档文件可以存放到其他地方,对生产性的数据库来说,归档是必须做的,这个没什么好考虑
    2)是否有必要使用动态生成新表来存储数据的方式,这个会否提高后来的查询删除效率,它同时提高了控制的复杂度,是否有价值?
        答:按时间分区,这样,你随时可以把不需要的时间的数据拆卸下来,另做保存,等需要的时候再放上去
    3)这种数据以二进制存储还是转为字符串存储好?
        签:用二进制存储比较省空间
      

  4.   

    关于存二进制还是字符的问题:
    为了便于处理和读取,我们以前的系统保存类似数据都是转为16进制字符存储的,但是很明显,这样做存储空间大了一倍,所以较难取舍。关于写入性能:
    我们的系统实时监控的时候,最大每秒需要4000次写入,被监控的最大通信带宽为 26M字节(也就是说,最大需要每秒写入oracle 26M数据,这还是二进制的方式,写成字符的话需要每秒写入52M,算上其他辅助字段,可能还要略大些!),当然,也不是随时都有这么大的写入要求,但是峰值还是有的。有没有高手做过高速写入的实例,这样的情况下,一般的oracle数据库I/O性能 能否承受呢?