我有 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 求和,为整个设置建立基线。同时导入记录。
当我获取新数据时,我会迭代记录(SAX 是一个好主意),如果记录尚未在数据库中(基于 UID)或已更改(基于 MD5 和)被导入。
这非常适合我们通常需要的功能(大约 350k 条记录分布在大约 100 个文件中),而且对于(更多)更多数据也能正常工作。它是多种工具的疯狂组合,包括 Bash、AWK、sed、grep,这些很棒的 XMLStarlet和 Ruby,并且迫切需要适当的重写。
关于ruby - 比较 2 个数组,每个数组包含 200,000 多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7125478/