【问题标题】:PHP: How to get random line in big file fastest?PHP:如何最快地获取大文件中的随机行?
【发布时间】:2015-02-10 02:17:27
【问题描述】:

我有 1 个包含 100 000 行的文件 txt。你能知道随机获得 1 条线的任何方法吗?非常感谢!

【问题讨论】:

  • 为什么不对你的一些想法进行基准测试。$line = file($filename)[rand(0,100000)]; 可能是你运行的一项测试
  • 您将不得不循环查找行数。看到这个答案stackoverflow.com/a/20537130/1281385
  • DannyHearnah 的建议会更快,但会使用更多内存。 exussums 将几乎不使用内存,但会更慢。
  • 取决于所需的每行随机性。一个简单的抽象是将 fseek 到任意 byte 位置,读取足够大的windoe(8K?)然后找到最近的换行符,并在该换行符和下一个换行符之间提取。

标签: php performance line


【解决方案1】:

最快的方法是建立索引(包含每个新行在文件中的位置的简单数组)。然后选择随机键,获取位置,fseek文件到该位置,并读取该行。这将需要在您更改文件时更新索引文件,但如果您想优化检索数据,那就是这样。

您可以通过在范围内拆分文件(例如,对数据进行分片)或对文件进行多种表示来进一步优化(例如,您可以让文件的行倒置,因此最后出现在前,并且如果您的随机数大于一半的元素,你从第二个文件中读取)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    • 1970-01-01
    相关资源
    最近更新 更多