【问题标题】:Reading a CSV file in chunks分块读取 CSV 文件
【发布时间】:2009-10-09 16:19:56
【问题描述】:

对于我的用户的新导入功能,我正在使用 fgetcsv 读取由 LibraryThing 和 Shelfari 等社交图书编目网站生成的 CSV 文件,然后我运行一系列亚马逊查询以从文件中查找 ISBN。我希望能够让用户确认符合特定条件的书名,然后将它们添加到本地书架。

其中一些文件将包含数百或数千条记录,我在 Amazon 上的平均每秒查找次数不能超过 1 次。我还希望用户确认我们已正确匹配他们的书籍。我在想我应该以 10 或 20 条记录为单位处理 CSV 文件,并显示“命中”以供用户确认。但我不知道如何有效地做到这一点。

例如,我可以将 CSV 文件读入一个数组,只选择 ISBN,我知道我可以在数组上使用一个简单的循环来针对 Amazon 测试 10 或 20 条记录。但是,如何允许用户接受或拒绝这批记录,然后再查看 10 或 20 条记录,而无需在 CSV 文件上再次运行 fgetcsv 并重新加载页面?

是否有一些简单的方法可以让数组在页面加载之间保持不变?或者我可以暂停以接受循环本身内的用户输入

【问题讨论】:

    标签: php arrays csv


    【解决方案1】:

    为什么不直接使用“延迟”导入方法? 允许 CSV 导入,处理“临时存储”数据库中的数据,并在后端通过亚马逊流程查找 ISBN。

    系统会提示用户“您的记录正在处理中,一旦我们完成验证,您将被要求查看它们”等;

    此时,他们可以在本地浏览您的列表,而不受亚马逊 1/秒 ISBN 查找的限制。我怀疑用户是否愿意在处理 10/20 时坐在那里,然后再等待下一页和下一页。

    所以这个过程应该像这样折叠:

    1. 用户导入数据(而在后端,一个 cronjob/进程会一一检查记录,而无需让用户等待)。
    2. 提示用户返回验证数据/用户在一段时间后返回(收到通知等)
    3. 用户浏览数据列表并对其进行验证(分页),在接受后,您将接受/有效的条目移动到最终数据库中(实时有效数据)。
    4. 如果用户想停止@record 100 of 100,000,您可以给他们这个选项,他们就有这种验证“队列”。

    听起来怎么样?更多的工作,但似乎是处理此类大型数据条目的最佳方法。

    【讨论】:

    • 我也一直在考虑批处理方法 - 但我同意你关于用户等待的观点,特别是如果他们有数百条记录。这个过程看起来不错,我会考虑实施它。谢谢!
    猜你喜欢
    • 2017-09-26
    • 1970-01-01
    • 2019-07-26
    • 2019-04-13
    • 2020-06-12
    • 1970-01-01
    • 2017-01-13
    • 1970-01-01
    • 2015-10-10
    相关资源
    最近更新 更多