【发布时间】:2013-03-15 09:51:35
【问题描述】:
我必须创建一个包含超过 6000 万条记录的大型 XML 文件。 我需要一种快速的方法来执行此操作,因为它会定期重复。
我在两个地方有数据
- 在两个不同表中的数据库中。
- 关于文件系统 在两个管道分隔的文件中。
目前,我正在尝试使用 StaX 解析器在 JAVA 中创建 XML 文件。
这里我需要知道是否应该使用数据库/文本文件来读取数据并创建 XML 文件。
哪一个会更快?
此外,是否有任何特定的 API 可以以优化的方式处理将此类大数据创建/转换为 XML 的方式?
我也愿意使用 linux 命令进行文件处理,前提是它是一个更快的选项。
评论更新
从两个单独的文件与 DB Query CSV 转储中获取 XML 元素信息的速度有多快? 数据库中可用的任何内容都可以在 PIPE 分隔文件中使用。 我们如何快速获取/创建 XML 元素信息正是这里问题的意图。这正是影响整体运行速度的因素。
映射复杂性:映射是一对多。第一个文件中的 1 条记录映射到第二个文本文件/表中的大约 8000 条记录。
评论更新 -> 使用大输出缓冲区。
明白了。将以较大的块从数据库/文件中读取数据,并在我处理完一个完整的块后将其刷新。但是我应该再次读取数据库还是读取文件?
更新 我可以使用 MySQL 数据库中的任何工具将其导出,自动转换为 XML 格式吗?
【问题讨论】:
-
数据库对于有意义的查询和报告非常有用。我会将查询输出转储到 CSV 并生成 XML 输出。因此,在生成 XML 时,DB 被单独留下;这可能需要很多时间。在保存到输出 XML 文件之前使用大的输出缓冲区。
-
啊,使用
pipe separated fields选项,您需要进行基准测试。使用大输入缓冲区进行文件读取。从两个单独的文件与 DB Query CSV 转储中获取 XML 元素信息的速度有多快?这两个文件之间的映射有多复杂?是1-1吗?这些文件中的记录是否按primary key排序? -
@SparKotॐ ->“在保存到输出 XML 文件之前使用大的输出缓冲区”是什么意思。 ?
-
将数据追加到内存比追加到文件要快。阅读也是如此。
-
明白。将以较大的块从数据库/文件中读取数据,并在我处理完一个完整的块后将其刷新。但是我应该再次通过数据库读取还是文件读取来做?