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

时间:2009-08-20 14:05:58

标签: c# database ms-access jet

背景:

我有一个Access数据库(.mdb)文件,里面有六个表。这个文件大约300MB,所以不是巨大的,但足够大,我想要高效。在其中,有一个主表,一个客户表。其他表存储数据,如协商,一些额外的多对一到一个字段,等等。

任务:

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

选项:

(我认为)

  1. List的不可变对象的形式将整个Access数据库加载到内存中,然后使用Linq在这些列表中查找我需要的相关数据。

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

    • 优点:
      • 重量可能更轻。仅加载所需的数据,并根据需要加载。
    • (可能)缺点:
      • 可能更重!可以多次加载项目,因此使用更多内存。
      • 除非Jet / OleDb支持并发查询(有人可以确认/否认这一点吗?)
      • ,否则很可能难以兼容
  3. 其他一些想法?

  4. StackOverflows关于解决此问题的最佳方法的想法是什么?

4 个答案:

答案 0 :(得分:1)

从SQL生成XML部件。在获取文件时将每个获取的记录存储在文件中。

样品:

SELECT '<NODE><Column1>' + Column1 + '</Column1><Column2>' + Column2 + '</Column2></Node>' from MyTable

答案 1 :(得分:1)

如果您的目标是将数据库转换为xml文件,则可以:

  1. 通过ADO / OLEDB连接连接到您的数据库
  2. 连续打开每个表作为ADO记录集
  3. 将每个记录集保存为XML文件:

    myRecordset.save myXMLFile,adPersistXML

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

答案 2 :(得分:0)

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

另外,根据您的需要,您可以直接从Access中提取 - &gt; XML,如果这是你真正的最终游戏。

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

答案 3 :(得分:0)

我倾向于使用jet,因为你可以更具体地了解你想要提取的数据。

另外我注意到了大文件大小,这是我最近遇到的一个问题。这是访问95或97分贝?如果将DB转换为2000或2003然后再转换为97将减小此大小,在某些情况下似乎是一个错误。在我将其转换为2000并再次回到它是8兆的时,我正在处理的DB声称是70meg。