我们有这个PHP应用程序从数据库中选择一行,对其进行处理(调用使用Web服务的外部API),然后根据完成的工作插入一个新的寄存器。有一个AJAX显示器,通知用户已处理了多少个寄存器。
数据主要是文本,因此数据非常繁重。
该过程一次由数千个寄存器完成。用户可以选择开始工作的寄存器数量。数据从一个表中获得,在那里它们被标记为“完成”。没有“WHERE”条件,除了可选的“WHERE date BETWEEN date1 AND date2”。
我们争论哪种方法更好:
对于使用PHP和PostgreSQL的Web环境,您认为哪种方法最有效?为什么呢?
答案 0 :(得分:1)
这真的取决于您对数据的关注程度(严重):
在这种情况下,可靠性是否重要?如果这个过程死了,你能重新处理一切吗?或者不是吗?
通常,在调用远程Web服务时,您不希望为同一数据项调用两次。也许有副作用(如信用卡收费),或者它可能不是免费的API ......
无论如何,如果您不关心潜在的重复处理,那么采用批处理方法。这很容易,很简单,也很快。
但如果您确实关心重复处理,请执行以下操作:
然后
您可以同时运行此代码,而不必担心它会自行运行。您将能够确信相同的记录不会被处理两次。
您还可以看到任何“未成功”的记录,因为它们的状态为“正在处理”,并且有任何错误。
答案 1 :(得分:0)
如果数据很重,负载也是如此,考虑到应用程序不是实时依赖,最好的方法是最明确地获取所需数据并处理所有数据,然后再将其放回去
效率而言,无论语言如何,如果您打开单个项目并单独处理它们,您可能正在关闭数据库连接。这意味着如果你有1000个项目,你将打开和关闭1000个连接。这远远超过了返回所有项目并处理它们的开销。