代码之家  ›  专栏  ›  技术社区  ›  Matthew Scharley

处理大型数据库的最佳方法?

  •  1
  • Matthew Scharley  · 技术社区  · 16 年前

    背景:

    我有一个Access数据库(.mdb)文件,其中有六个表。这个文件大约有300MB大,所以不是 巨大的

    我必须编写一个程序,将Access数据库转换为一组XML文件,每个客户端一个。这是一个数据库转换应用程序。

    选项:

    (在我看来)

    1. 将整个Access数据库以 List ,然后使用Linq在这些列表中查找我需要的关联数据。

      • 好处:
        • 易于并行化。启动a ThreadPool 每个客户端的线程。因为所有对象都是不可变的,所以它们可以在线程之间自由共享,这意味着所有线程都可以随时访问所有数据,并且所有数据只加载一次。
        • 可能会使用额外内存,加载孤立项、不再需要的项等。
    2. 使用Jet在数据库上运行查询以根据需要提取数据。

      • 好处:
        • 可能重量更轻。仅加载所需的数据,并根据需要加载数据。
        • 可能更重!可能多次加载项目,因此使用 更多 记忆。
    3. 还有别的想法吗?

    对于解决这个问题的最佳方法,StackOverflows有什么想法?

    4 回复  |  直到 16 年前
        1
  •  1
  •   Cătălin Pitiș    16 年前

    从SQL生成XML部分。在提取记录时将其存储在文件中。

    SELECT '<NODE><Column1>' + Column1 + '</Column1><Column2>' + Column2 + '</Column2></Node>' from MyTable
    
        2
  •  1
  •   Philippe Grondier    16 年前

    1. 通过ADO/OLEDB连接连接到数据库
    2. 以ADO记录集的形式依次打开每个表
    3. 将每个记录集另存为XML文件:

    如果您使用的是Access文件,请使用currentProject.accessConnection作为ADO连接

        3
  •  0
  •   Mitchel Sellers    16 年前

    从这听起来,这将是一个一次性的操作。我强烈反对将整个设置加载到内存中的实际过程,这似乎根本不是一种有效的方法。

    无论如何,对于这么小的数据库,在我看来,一次只做一个,并使用一些专门编写的查询,将更易于管理,编写速度更快,并且更不容易出错。

        4
  •  0
  •   Jambobond    16 年前

    我还注意到文件太大,这是我最近在工作中遇到的一个问题。这是95分贝还是97分贝?如果是这样的话,将DB转换为2000或2003,然后再返回到97将减少此大小,在某些情况下这似乎是一个bug。我处理的DB在我将其转换为2000之后声称为70兆欧,然后又恢复为8兆欧。