现在有一个需求:
客户提供一个数据文件,这个文件包含4000行数据,其中每一行由10000项指标数据组成如果把这个表保存到一张表显然是不现实的因为这将创建一个10000个字段的表,而ORACLE的单表最大列数仅为1000个我想了如下两个办法:1、把字段行化,表结构为:行号(rid),指标名(name),指标值(value)这个方法虽然可以实现功能,但性能非常不好,首先是在数据解析上较为麻烦再就是数据量将很大(对于此例将有40000000行数据)并且以后基于此表的统计也将非常麻烦2、把表细化,比如:创建10个表,每个表1000列,即把10000个字段分成10个表存储虽然这样在以后的应用上比较方便但是这个在数据解析上也很麻烦不知道有没有比较好的解决方案敬请各位仁兄不吝赐教,谢谢!

解决方案 »

  1.   

    我建议第二种方法,设计一个表叫tablecolumn的表,用来描述表字段。
    例如
    id , column, table, name
    1 , column1, table1 , columnA
    2 , column2, table2 , columnB
    3 , column3, table3 , columnC用 name 字段拼接出 view 进行查询统计操作
    例如 select table1.column1 as columnA, table2.column2 as ColumnB, 
    Insert, Update 也可用此表解析
    update table1 set column1 = 'xxx'; 
      

  2.   

    设想:
    可以分表存储,10000列分10(如果考虑ID的话应该是11)张表存储
    一条数据在这10张表中都对应有1条记录
    这些记录序列相同
    insert、delete的时候用批处理
    select跟一张表查区别不大
    update的时候需要特别处理一下
      

  3.   

    首先感谢两位的指点,我现在也是想采用2楼(BuilderC)的方式实现,
    现在就是要解决这样一个问题:
    表这么分的问题。
    按指标相关性进行分呢,还是按指标顺序进行划分?从业务层面上讲,按指标相关性划分比较合理,
    但是如果指标分布比较分散的话,
    在解析文件拼写SQL语句的时候将非常麻烦从操作层面上讲,按顺序划分比较方便,
    但这样在后面的应用上可能会有些麻烦
    当然,数据比较复杂,麻烦是不可避免的
    现在就是想找到一个比较权衡的办法我现在是这样想的,
    按照顺序进行划分,
    这样在解析文件和插入的时候较为方便
    首先将文件按照列顺序分成若干个小文件
    然后将这些小文件通过SQLLOADER分别录入到相应的表中
    在此之外,我还想到另外一个方法
    只创建一个表
    将多个指标项作为一个对象插入到一个字段中
    我觉得这个方法可以一试
    但是以前没用过这种方法
    不知在以后的统计中是否有问题在此,还敬请各位仁兄指点迷津,谢谢!