现有一B/s模式系统(java,jsp开发),因为数据量挺大,用户同时在线500人以上,年数据量1000万条左右,导致速度很慢。而且出现不少错误,特此请高手帮忙解决下列问题:
1.用户进入系统后,进行数据修改时,默认是将本月所有数据都取出,放入ResultSet,能否给出相关sql或数据库方法,优化速度,比如用户选定某一页后,再去取出本页要显示m-n行,赋值给resultset,以免resultset用尽。
2。当用户提交数据录入请求后,应该录入5条,有时只录入3、4条,剩下的不知为何丢失了
3。能否帮忙给出其他一些提高速度的方法

解决方案 »

  1.   

    你可以考虑用hibernate之类的工具对数据库表进行映射,实现数据对象持久化,速度可能会好点
      

  2.   

    1. select * from tablename where month=to_char(sysdate,'mm')
    2.事务处理的问题
      

  3.   

    1000万数据跟本不多.
    请尽量优化SQL,
    和程序.
      

  4.   

    你在进行批量插入的时候应该用jdbc提供的方法。而不应一条一条的插入。那样很可能出现数据丢失。
      

  5.   

    我认为:提高速度,可以建索引,或缓冲,优化sql;至于丢数据,我觉得是没有处理好多用户并行,你看下程序,应该是有漏洞,可能像liuyi8903(西西) 说的,没有进行事务控制
      

  6.   

    对第一个问题可以这样
    分页显示,用户当前页看不到的没必要选到记录集中,费时也费资源
    比如说选出 第11条到第30条记录
    SELECT T1.* FROM (SELECT ROWNUM RN ,T.* FROM (select col1,col2... from t_test where ...) T WHERE ROWNUM <= 30 ) T1 WHERE RN >=11 ;对于数据量大的问题,建表时可以进行分区(PARTITION BY)使用多个表空间,如果用户习惯按月份查询,就按月份分区,或者按地区(省份)都行,看业务需求了。这样的话也方便备份
    CREATE TABLE stock_xactions
    (stock_symbol CHAR(5),
    stock_series CHAR(1),
    num_shares NUMBER(10),
    price NUMBER(5,2),
    trade_date DATE)
    STORAGE (INITIAL 100K NEXT 50K) LOGGING
    PARTITION BY RANGE (trade_date)
    (PARTITION sx1992 VALUES LESS THAN (TO_DATE(’01-JAN-1993’,’DD-MON-YYYY’))
    TABLESPACE ts0 NOLOGGING,
    PARTITION sx1993 VALUES LESS THAN (TO_DATE(’01-JAN-1994’,’DD-MON-YYYY’))
    TABLESPACE ts1,
    PARTITION sx1994 VALUES LESS THAN (TO_DATE(’01-JAN-1995’,’DD-MON-YYYY’))
    TABLESPACE ts2);