依照惯例,描述一下应用场景。有个系统,分为主站和一个网关程序。有一个应用,整体流程如下:1 用户点击JSP上的按钮,主站根据所选信息通过socket组织命令下发给网关。2 网关经过处理,得到数据,并进行合法性判断。3 网关将经过处理的数据存入数据库,并通过之前的socket回复主站成功。4 主站接到成功报文后,关闭socket连接。5 主站根据所选条件,去数据库查询相关信息,这些信息就是刚才网关程序存入数据库的,也就是网关程序解析出来的数据。6 主站将经过处理的信息展示在JSP上,通过Ajax刷新页面。现在的问题是,由于数据量巨大,每天新增的数据约有4KW条记录,导致数据库无限膨胀。目前已经进行过分表处理。但是每天的记录还是很多。基本上是在4KW条记录里捞出几百条来,速度非常慢。现在的速度瓶颈卡在3-6之间,非常慢,主要是数据库操作慢。我来归纳一下。1-4是一个流程,不可打破。5-6是一个流程,不可打破。也就是说,1-4之间的步骤基本不可改,5-6也一样。主要的目的是,通过这一整套流程刷新JSP页面上的数据。数据必须存入数据库,但是呢,主站取的数据不一定要来自于数据库,可以有其他方式返回。只要能拿到就可以。换言之,5 6两步的操作方式是可以修改的。现在两套软件都是我们自主开发。问题来了。怎么改比较合适呢?

解决方案 »

  1.   

    5查的如果跟3是一一对应的话,其实在3可以插入数据库之后,把数据一起通过socket返回给jsp啊
    如果不能在3返回,而5查的又是刚才在3里面做的处理的那些,那么在3,可以考虑用临时表来存等下5要查的,5查完了之后就把临时表数据删除。。
    但是你的业务逻辑描述得还是不够细。比如你得5查了只是为了显示?5/6两步得具体过程?楼主貌似在做短信网关,所以有这么大数据量。
      

  2.   

    显示完了的接着还查不?是不是1234做完了就5马上 搜,搜过去显示完了就马上删?如果你的临时数据同时保存不多的话,临时表上不要建索引。用完就删。(DML频繁的表上有索引影响效率,特别是你这种单日上KW的。)
      

  3.   

    显示完了就不用了。网关程序会另外保存一份数据的。那我就先CREATE TABLE,然后SELECT,然后TRUNCATE TABLE,然后DROP TABLE?