在一个项目中,如果需要对大量的数据(30万条记录以上)进行频繁的检索、计算等操作,为了提高系统的反应速度,在系统启动时,将数据库中的数据读取到内存中,
即将数据读取到一个个的DataTable中,系统运行过程中,尽量从这些DataTable中进行数据的检索与计算(如利用DataTable的Select 和 Compute方法)。这样似乎能
加快系统的运行速度。缺点是内存需求大。不过现在的内存便宜,这样做似乎也不可。不知道大家遇到这样的情况是怎么处理的?
大量数据频繁检索时,为了避免系统假死和反应过慢,都采用什么样的技术呢?接着上一个问题,在进行项目开发的时候,为了方便进行单元测试,也为了方便任务分工和系统集成,一般会将功能相似的部分(若干个类)提取出来,单独创建一个类库项目,
将这些功能类封装成DLL文件,供主程序调用。大家应该也是这样做的吧?
这样,我的问题来了。在这些类库项目中,如果我需要用到那些保存在DataTable中的数据,该怎么处理?我总不能在每一个类库项目中都把数据加载一次吧。各位大侠是怎么处理这个问题的呢?我感觉是自己没有处理好逻辑和数据分离的问题,逻辑和数据之间的耦合性太高!
对了,在载入数据的时候,我是把那些DataTable都写在同一个静态类中,比如一个叫Globle的静态类中。

解决方案 »

  1.   

    感谢二位的回复!THX!
    我还想确认下关于优化速度这个问题,除了我上面说的事先载入数据和ki1381说的调优数据库,是否还有其他主流的方法,目前大家一般都用什么样的方法来处理这样的问题?
      

  2.   


    “数据库再怎么优化也是读硬盘的,与读内存没有可比性。”不太同意啊其实做数据库优化的主要目的之一就是为了避免物理读,而且这个是可以实现的。现代数据库系统,包括服务器、存储、以及DB本身,都有许多机制来缓存数据从而避免直接的磁盘IO。我们系统中有一些表达到了小几千万条记录的级别,但是应用程序没做本地缓存、绝大多数时候响应时间也都在令人满意的程度上。取到本地缓存带来的另一个潜在问题就是如何保证与服务器端数据的一致性。解决这个问题的开销未必小。
      

  3.   

    两位说的都很有道理啊!
    关于数据一致性的问题,我确实在项目中遇到了!不知道sbwwkmyd使用什么简单的方法解决的,小弟惭愧,想不到!不知道能否指点一二!谢过了!
      

  4.   

    目前我考虑的方法是,对树等结构比价复杂的数据,在本地缓存,我觉得象 sbwwkmyd所说“结果是结构化的(不需要经过计算解析生成),其内存占用最少”,而且做好后使用起来也很方便。
    在此基础上将逻辑与数据尽量的分离。实在耦合的紧密那也就没有办法了!我也不想为了降低耦合性,把代码弄得非常的绕,毕竟我的最终目的是要把项目做了!