ruby - 比较 2 个数组,每个数组包含 200,000 多个值

标签 ruby xml performance algorithm

我有 200,000 多个 XML 文件中的数据堆栈,这些文件每周都会更新/创建。因此,每周我都必须解析每个 XML 文件,检查是否创建了新的 XML 文件,然后使用所有更新的数据更新我的数据库。在这之间,如果有新的 XML 文件,那么我的数据库将没有该记录,因此我必须创建一个新行。

这是我的工作流程计划:

  1. 将所有表 X 行 ID 放入数组 A 中。假设有 200,000 个数值。
  2. 解析每个 XML 文件并收集每个 XML 的 ID(ID 将与我的表 X ID 相同),并存储在数组 B 中。假设现在我有 200,010 个数值,与当前的表 X 相比有 10 条新记录.
  3. 比较数组 A 和数组 B 以查看哪些值不存在。
  4. 将 10 个新值放入数组 C 中。
  5. 使用数组 C 中的 10 个新 ID 在表 X 中创建新记录。
  6. 再次解析每个 XML 文件,并将所需的值存储到我的表 X 行列中。
  7. 现在我的表 X 将有 200,010 条记录,并且每条记录都会更新,新的 10 条记录现在也将位于表 X 中。

我必须这样做的问题是因为我无法获取供应商创建的任何新 XML 文件的任何信息。他们只是给了我一堆文件。

还有什么更好的方法吗?我担心当比较两个具有 200,000 多个值的数组时我的系统会崩溃。谢谢。

最佳答案

我必须做类似的事情。最后我是这样做的:

  1. 通过迭代所有 XML 文件中的每条记录、标准化项目(删除换行符、清理空格、替换某些字符),然后对每个记录进行 MD5 求和,为整个设置建立基线。同时导入记录。

  2. 当我获取新数据时,我会迭代记录(SAX 是一个好主意),如果记录尚未在数据库中(基于 UID)或已更改(基于 MD5 和)被导入。

这非常适合我们通常需要的功能(大约 350k 条记录分布在大约 100 个文件中),而且对于(更多)更多数据也能正常工作。它是多种工具的疯狂组合,包括 Bash、AWK、sed、grep,这些很棒的 XMLStarlet和 Ruby,并且迫切需要适当的重写。

关于ruby - 比较 2 个数组,每个数组包含 200,000 多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7125478/

相关文章:

performance - Elasticsearch应该在没有计算相关性的情况下进行查询(_score)

ruby - Sinatra 中的 session : Used to Pass Variable

ruby-on-rails - 如何在 Rails 4 中使用 @font-face 嵌入字体?

ruby-on-rails - TestMailer 的参数数量错误

xml - 为什么 XPath 表达式在 Illustrator 生成的 XML 上失败?

java - 解析 XML 文档时出错

使用 Regexp 的 Ruby Dir.glob 替代品

android: Activity 作为大屏幕的子屏幕?

java - 长FIFO队列应用的GC暂停调优

c - c中如何提高标准矩阵加法算法的效率?