PHP喷口读/写速度

我正在使用spout库来读写PHP中的excel文件。 我只是有一个关于速度的问题。

当我尝试读取/写入10万条logging时,只花了15分钟当我尝试读取/写入200条logging时,现在花了1.5小时

我尝试了一夜之间上传了60万条logging,花了9个小时。

我不知道这是我的机器还是什么。 但是,这不仅是双倍增长的世代时间。

任何提示加速?

提前致谢! 🙂

Spout用于将数据写入电子表格的时间应该与数据集的大小成比例。 阅读电子表格是不同的。 有三种可能的select:

  • 您的电子表格使用内联string而不是共享string:阅读时间应该与数据集大小成正比。
  • 您的电子表格使用共享string:
    • 共享string的数量是有限的,可以适应内存:读取时间应与数据集大小成正比。
    • 有太多的共享string适合内存:Spout将然后将共享的string拆分成块,可以适应内存。 每个块都保存到磁盘,只有包含正在读取的string的块被加载到内存中。

有两个第一select,一切都很好,喷口尽可能快。 尽pipe如此,第三种select需要更长的时间。 这是避免内存不足的问题…如果电子表格使用共享string或多或less有序(A1使用string1,B1使用string2 … Z10使用string840),perf命中将不会那坏(它增加了几个IO操作来从磁盘读取数据)。 但是,如果共享string不是(A1使用string1,但B1使用string200,000 – 存储在另一个块中,C1使用string3),因为Spout顺序读取单元,它将不得不做更多的IO操作来加载正确记忆中的大块。

所以回到你的问题,你可以看看你的数据是如何在描述电子表格的XML文件中定义的。 如果您使用Spout创build电子表格,请确保使用内联string(最终文件大小将会更大,但读取会更快)。

你可以做的其他事情就是修改这个文件: CachingStrategyFactory.php 。 如果你知道你所有的字符都是1个字节的字符,你可以将内存中的string数量增加4(因为Spout假定用4个字节来计算)。

希望有所帮助!