我需要找到一种在 PHP/MySQL 中高效处理大量数据的方法。情况是这样的:
我有一个包含一百万条记录的数据库表。根据来自 PHP 的用户输入,我需要根据一个重要的计算步骤对所有这 100 万条记录进行排名,以便我可以选择得分最高的项目。我的问题是,如果我将数据重新排列到列中并使用 array_multisort,从内存使用的角度来看,这种扩展非常差,特别是在排序步骤。
我能想到的替代方法是:
- 在 PHP 中进行计算并将带有分数的数据重新插入到临时表中,使用 SELECT ... ORDER BY score ... LIMIT 查询检索得分最高的项目
- 在 PHP 中进行计算并将数据和分数输出到 CSV 文件中,然后调用命令行排序实用程序,然后读取前 X 行
- 使用存储过程在 MySQL 中进行计算并检索前 X 个项目,如选项 1 中所示。我担心的是数据库是否非常适合这将涉及的数字运算
对于搜索引擎之类的东西来说,这一定是一个相当普遍的问题。可扩展性是第一要务,但性能也必须非常好。这些方法中的一种是最好的,还是有其他一些我什至没有考虑过的好选择?
最佳答案
假设您的数据集太大而无法存储在内存中……如果您只需要前 n 个项目,则在分页浏览 100 万行时,您可以只将最前面的结果保留在内存中。这也适用于您的临时表想法,写入每个批处理的顶部记录。
另一种选择是编写用户定义的函数:
http://dev.mysql.com/doc/refman/5.1/en/adding-functions.html
关于php - 使用 MySQL 和 PHP 高效处理大量数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6419753/