我有一张超过15000个Feed的表格,预计会增长。我想要做的是使用simplepie获取新文章,同步并将它们存储在数据库中。
现在我遇到了一个问题,因为Feed数量很多,我的服务器停止响应,我无法再提取Feed。我还实现了一些缓存,并以diff时间间隔提取奇数和偶数。
我想知道的是,有什么办法可以改善这个过程。也许,并行提取Feed。或者可能是因为有人可以告诉我伪造的算法。
答案 0 :(得分:0)
无论如何,一些想法:
set_time_limit()
last_check
添加一个字段,并将该字段设置为该Feed最后一次成功提取的日期/时间。last_check
字段,可以轻松识别自上次更新以来时间最长的字段,并设置处理频率的阈值。与单个流程相比,设置所有这些可能听起来像很多工作,但它可以让您处理增加的用户量,并为您可能在轨道上看到的任何进一步维护任务奠定坚实的基础。 / p>
答案 1 :(得分:0)
使用simplepie同步获取新文章
“同步”是什么意思?你的意思是连续进入同一个过程吗?如果是这样,这是一种非常愚蠢的方法。
您需要一种分片数据的方式来跨多个进程运行。以声明方式执行此操作,比如提要ID的模数或URL的哈希值不是一个好的解决方案 - 一个慢的URL会导致多个提要被阻止。
更好的解决方案是启动多个线程/进程,每个线程/进程:
请注意,如果在步骤2中没有过期记录,那么表应该被解锁,下一步取决于您是否将线程作为守护进程运行(在这种情况下,它应该实现指数后退,例如,睡眠为10对于连续迭代,秒数加倍,最多可达320秒)或者如果您正在批量运行,则退出。
答案 2 :(得分:0)
感谢您的回复。我道歉,我回复得有点迟了。我忙于解决这个问题,后来我忘记了这个帖子。
我一直在研究这个问题。面临很多问题。你看,每天15,000饲料并不容易。
可能我是MAD! :)但我确实解决了它。
我写了自己的算法。是的!它是用PHP / MYSQL编写的。我基本上实现了一个简单的加权机器学习算法我的算法基本上学习了有关Feed的发布时间,然后估算了Feed的下一个轮询时间。我把它保存在我的数据库中。
由于它是一种学习算法,因此随着时间的推移而改进。当然,有'未命中'。但这些失误比崩溃的服务器更好。 :)
我还写了一篇关于此的文章。已在当地计算机科学期刊上发表。
此外,关于性能提升,与顺序轮询相比,速度提高了500%至700%。
我有一个TB已经增长的数据库。我正在使用MySQL。是的,我正面临关于MySQL的性能问题。但它并不多。最有可能的是,我将转移到其他数据库或实现对现有数据库的分片。
很简单,因为我想向人们展示PHP和MySQL能够做到这一点! :)