如何使PHP异步写入?

时间:2013-01-27 10:59:03

标签: php io

是否存在异步写入的PHP命令(因为在编写数据时我并不在意,而且优先级非常低。)

我在服务器上托管了1,300个域名。我知道这很多。但每个内存占用很少,CPU占用很少,带宽也很少。瓶颈是随机写入。随机写入次数过多(随机读取)。服务器是Linux。

我看了here

  

因此,SYNC读取和ASYNC写入通常是一种很好的方法   它们允许内核优化的顺序和时间   基础I / O请求。

     

你去吧。我打赌你现在有很多话要说   有关改进disk-IO的演示文稿。 ; - )

大多数写入只是缓存文件。如果偶尔出错,我什么也没有失去。基本上我想设置我的系统,以便大多数读写都会进入内存,然后当我希望我的服务器将数据写入顺序块中的磁盘时。

我有大量的内存可以用作缓存。在Windows中,我使用超级缓存执行此操作,所有内容加载速度更快。那里的人告诉我Linux已经有块缓存。好吧,块缓存不起作用,我仍在研究如何使大多数写入首先进入内存,以便数据只是偶尔刷新。

现在,我只是想修改我的PHP程序,所以当它写入数据时它会告诉内核“将来只写一些,我可以等,我不介意。”

有没有选择?我可以使用SSD,但它们很小。

1 个答案:

答案 0 :(得分:2)

如果大多数写入活动是由缓存引起的,那么我会使用apc或memcached作为缓存的后端而不仅仅是文件系统。必须单独处理必须持久保存到文件系统的任何写入,而不会碰到磁盘上的竞争缓存。要考虑的唯一考虑因素是您的缓存现在在内存中,它将在重新启动后清空,如果这会导致性能问题,您可能希望实现缓存预热过程。

大多数主要的PHP框架都有memcached和apc(即Zend Framework)作为其缓存模块的可用存储适配器,因此这将是我的首选。如果不能,您可以直接使用memcachedapc扩展名。

另一个选择是查看实现可以发送挂起写入的队列。然后,该队列可以由以可接受的速率执行写入的计划任务定期处理。我过去曾使用过Zend_Queue来达到类似的目的。