1

背景:

我有一个 Access 数据库 (.mdb) 文件,其中包含六个表。这个文件大约 300MB 大,所以不是很大,但足够大,我想提高效率。其中有一个主表,一个客户表。其他表存储数据,例如进行的咨询,一些额外的多对一字段,诸如此类。

任务:

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

选项:

(照我看来)

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

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

    • 好处:
      • 重量可能更轻。仅加载需要的数据,并且在需要时加载。
    • (可能的)缺点:
      • 可能更重!可能会多次加载项目,因此会使用更多内存。
      • 可能很难并行化,除非 Jet/OleDb 支持并发查询(有人可以确认/否认吗?)
  3. 还有什么想法?

StackOverflows 对解决此问题的最佳方法有何想法?

4

4 回答 4

1

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

样本:

SELECT '<NODE><Column1>' + Column1 + '</Column1><Column2>' + Column2 + '</Column2></Node>' from MyTable
于 2009-08-20T14:20:44.037 回答
1

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

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

    myRecordset.save myXMLFile, adPersistXML

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

于 2009-08-21T06:03:41.667 回答
0

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

此外,根据您的需要,如果那是您真正的最终游戏,您也许可以直接从 Access -> XML 中提取。

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

于 2009-08-20T14:10:51.243 回答
0

我会倾向于喷气机,因为您可以更具体地了解您想要提取的数据。

我还注意到文件很大,这是我最近在工作中遇到的问题。这是访问 95 还是 97 db?如果这样将 DB 转换为 2000 或 2003,然后再转换回 97 将减小此大小,在某些情况下这似乎是一个错误。我正在处理的 DB 在我将其转换为 2000 后声称为 70meg,然后又恢复为 8 meg。

于 2009-08-20T14:19:23.010 回答