【发布时间】:2011-08-22 12:55:29
【问题描述】:
我在 200,000 多个 XML 文件中有一堆数据,这些文件每周都会更新/创建。所以,每周,我都必须解析每个 XML 文件,检查是否有新的 XML 文件正在创建,然后用所有更新的数据更新我的数据库。在这两者之间,如果有新的 XML 文件,那么我的数据库将没有该记录,所以我必须创建一个新行。
这是我的工作流程计划:
- 将所有表 X 行 ID 放入数组 A。假设是 200,000 个数值。
- 解析每个 XML 文件并收集每个 XML 的 ID(ID 将与我的表 X ID 相同),并存储在数组 B 中。假设现在我有 200,010 个数值,与我当前的表 X 相比有 10 条新记录.
- 比较数组 A 和数组 B 以查看哪些值不存在。
- 将 10 个新值放入数组 C。
- 使用数组 C 中的 10 个新 ID 在表 X 中创建新记录。
- 再次解析每个 XML 文件,并将所需的值存储到我的表 X 行列中。
- 所以现在我的表 X 将有 200,010 条记录,并且每条记录都会更新,新的 10 条记录现在也将在表 X 中。
我必须这样做的问题是因为我无法获得供应商创建的任何新 XML 文件的任何信息。他们只是给了我一堆文件。
还有更好的方法吗?我担心当他们将两个数组与 200,000+ 值进行比较时,我的系统会崩溃。谢谢。
【问题讨论】:
-
什么语言?您如何获取 XML 文件?有很多方法。尝试过类似 MD5 的方法来检查文件?还记得存在哪些文件名吗?查看更改日期?
-
红宝石。 XML 文件都以压缩格式存储,必须解压缩并存储在临时目录中。 ID 也是文件名,也许我可以在步骤 2 中执行此操作。没有更改日期。只是原始 XML 数据。
-
为什么需要再次解析 XML 文件(第 6 步)?如果 ID 未知,解析每个 XML 文件并 insert 将 xml 内容添加到表中,或者如果 ID 已知,则 更新 xml 内容是否足够?
-
利用数据库快速定位匹配项的能力。这就是它的用途。正如其他人所提到的,为 md5 值创建一个索引字段。为文件生成 md5 并查看表中是否有它。如果您想真正彻底/偏执,还可以为 XML 的长度创建一个字段并对其进行比较,或者在生成 md5 之前对 XML 进行规范化。但是让数据库比较这些值。无需在内存中创建巨大的数组。
标签: ruby xml performance algorithm