【问题标题】:Parsing huge XML file for getting information from huge CSV file解析巨大的 XML 文件以从巨大的 CSV 文件中获取信息
【发布时间】:2016-12-01 16:12:16
【问题描述】:

我有很大的问题。

我的任务是输入有关产品的数据库信息。除价格外的所有信息都在 100mb 大的 XML 文件中

在另一个文件中有关于该产品价格的信息。即 CSV 文件,大小约为 200mb

简单的逻辑

  1. 将 XML 解析为数组
  2. 在另一个文件中按产品的唯一 ID 搜索价格
  3. 将找到的价格添加到该产品所在的数组元素中
  4. 将信息放入数据库

但我不能那样做。 SIZE 有问题。

我设法解析 XML 并将其放入数组中,但我无法处理 CSV 文件。如果有 1000 个产品,他需要为每个产品解析 CSV 文件(该 CSV 文件有超过 30.000.000 行)。我无法解析那个 CSV 文件,更不用说 1000 个了。

我需要建议如何解决这个问题

【问题讨论】:

  • 尝试时会发生什么?显示您的代码和任何错误消息。也许你需要提高你的内存限制?
  • Problem is in SIZE. 使用 XMLReader 并将其解析为数组,并为 csv 使用 fopen,fread,fclose(也不将其完全解析到内存中)。这是一个很好的开始。
  • 您也可以在解析 XML 之前先将 CSV 完全解析到一个临时数据库(csv-header 作为表字段)。然后使用 DB-CSV 数据(在 csv 文件的表格中查找)。
  • @JustOnUnderMillions 我正在使用 XMLReader 进行解析,而不是一次处理整个文件,没关系。我在逐行读取 CSV 时遇到问题,因为有超过 3000 万行,所以 PHP 无法在十分钟内完成足够的“fgetcsv”,我需要更快的方法(如果有的话)。

标签: php xml csv


【解决方案1】:

对我来说,这看起来像是数据库的工作。将这两个文件加载到数据库中,然后进行简单的连接。

【讨论】:

  • 您认为将200mb的文件放入数据库并搜索不是什么大问题?以及在数据库中导入此类文件的最佳方法是什么。什么样的查询?
  • 恐怕我们现在谈论的是系统设计和架构、技术选择,以及一系列超出 StackOverflow 范围的事情。我确实很欣赏我的单行答案是您无法在 5 分钟内实施的事情,而且确实可能​​存在我不知道的项目限制,这使得整个方法不可行。
【解决方案2】:

使用XMLReader for the XMLSplFileObject for the CSV

不要将信息保存在内存中。将其直接写入 MySQL 或 SQlite 等数据库。导入所有数据后,您可以使用 SQL 对其进行聚合。

【讨论】:

    猜你喜欢
    • 2014-07-22
    • 1970-01-01
    • 2010-10-29
    • 2013-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多