之前做过一个基于 .net 2.0+SQL 2008 做的地区性的网站,是用两层结构做的。在网站的首页有一个记录访问者IP的功能,数据表累计到现在,一共有25000多条不重复的IP,共有IP 30000多条。现在上头说要加上一个功能,要把这些IP所属的地区都查出来。之前有人手动查到4000多条,然后就不做了。所以现在上头说,在page_load里,加上如下功能。基于以前的查出来的IP所属地区,把没有查出所属地的IP先和以前的查出来的做对比,如果IP一样,就把后来的IP加上所属地就好了。如果IP是以前没有的,则显示在网页上,让员工手动查完后,再手动输入,一次更新一条,更新完要马上就可以看到刚更新过的数据。请问,如按这样的业务流程,有没有高效的方法?或是更好的写法?我怕这么多的数据,用gridview+dataset来做,会导致内存暴涨,网站crash掉。这个网站没有存储过程,我现在只会用dataset来读完数据,再用gridview分页,这么多的数据,一条IP更新完马上就要重新bind,用 updatepane做显示。

解决方案 »

  1.   

    网站没存储过程的意思是 数据库那块你不能动?
    那这样你就只有单纯从代码上做优化。既然是分页的话 那你可以排序下取出最近被更行的记录放前头,一页取多少条自己定,这样就不用一次将所有记录都取出来。SQL语句照样能实现啊 不一定要存储过程分页如果可以动数据库的话最好  可以加索引什么的 可以提高访问效率。几百万的数据都能访问 何况你这只有几W
      

  2.   

    这样肯定要分页啊,分页可以解决这一切问题。aspnetpager,分页控件。。
    分页程序网上一大堆
      

  3.   

    就是显示区域?AJAX不行吗?匹配显示,不匹配插入数据库。
      

  4.   

    程序员的眼睛是来寻找bug的.不要来找ip的一个一个输入的. 机器自动输入吧.
      

  5.   

    1.要分页. 有什么理由不分页呢.2.IP查询,通过IP数据库,应该由系统自动查询.怎么会想到人工手动查询?用现代化的工具做最原始的事情?3.在IP记录表中新增一字段 "地区",然后在后台用程序一次性将所有未查出的ip的地区值,然后存储在"地区"字段.4.以后在新记录ip入库时,每次入库前,都先查出对应的地区,然后与ip同时保存在数据库中.  
      

  6.   

    晕  还有人手动查IP所属地的啊   分页   然后调用webservice  对比IP地址 得到所属地。我记得网上有这种的。
      

  7.   

    我记得有一个IP数据库,你可以去下回来。然后将你所有的IP属性对比查询出来。
    另外建议你的做成分页查询,
    select top 行数*页数 from table where id not in(select id top 行数*(页数-1) id from table order by id) order by id
      

  8.   

    思路告诉你把:
      把读取的ID先保存在IIS上面做为全局变量。每天对IP的操作全部放在内存中,不要去访问数据库了。然后在做个页面,人少的时候,将这些数据一次性提交到服务器上面。更新完毕后在读取,
      

  9.   

    1、数据库加一个文本字段,用于存放IP对应的地区
    2、在后台开发一个新功能,对地区为空的字段,进行该IP的地区查询,把查询到的地区写入该地区字段
    3、可以使用纯真数据库,进行IP对地区的查询,3万条数据可以批次更新,比如一次更新5000条数据,6次就完成了
    4、要一次性显示3万条数据,估计网页会卡死,如果没有什么必要,是不要这样操作的,可以分页。如果显示很多的数据是为了查找一些需要的数据,那么可以增加一个搜索项,比如可以搜索某个地区的所有IP等等。显示出来的数据,就直接读取IP、地区字段了,不必要再进行什么实时查询,实时查询是自杀的方式。