Eri*_*rom 7 php performance fgets large-files splfileobject
我想知道是否有人知道如何在PHP中完成这项工作.我正在运行一个脚本,涉及打开一个文件,占用前1000行,用这些行做一些东西,然后php文件打开另一个自己的实例来接下一千行,依此类推,直到它到达文件的末尾.我正在使用splfileobject,以便我可以寻找某条线,这使我可以很好地将其分解为1000行块.我遇到的最大问题是性能问题.我正在处理拥有超过10,000,000行的文件,虽然它在前10,000行左右的速度非常快,但在此之后有一个巨大的指数减速,我认为只需要寻求这一点.
我想要做的是读取前几千行,然后从文件中删除它们,以便我的脚本始终读取前几千行.有没有办法在不将文件的其余部分读入内存的情况下执行此操作.我见过的其他解决方案涉及将每一行读入一个数组,然后摆脱前X个条目,但有一千万行会耗费太多的内存和时间.
如果有人有解决方案或其他建议可以加快性能,那将非常感激.
不幸的是,没有真正的解决方案,因为文件在读取之前总是完全加载到主内存中。
尽管如此,我还是发布了这个答案,因为这是一个可能的解决方案,但我怀疑它很难提高性能。如果我错了请纠正我。
您可以使用 XML 将文件划分为 1000 行单元。并使用 PHP 的 DomDocument 类来检索和追加数据。当您想要添加数据并检索第一个子级以获取前一千行时,您可以附加子级,并根据需要删除该节点。像这样 :
<document>
<part>
. . .
Thousand lines here
. . .
</part>
<part>
. . .
Thousand lines here
. . .
</part>
<part>
. . .
Thousand lines here
. . .
</part>
.
.
.
</document>
Run Code Online (Sandbox Code Playgroud)
其他方式 :
如果您确实确定将这些部分分成正好 1000 行,为什么不将其保存在数据库中,每 1000 行位于不同的行中?通过这样做,您肯定会减少文件读/写开销并提高性能。
| 归档时间: |
|
| 查看次数: |
672 次 |
| 最近记录: |