繁体   English   中英

使用MySQL和PHP有效地处理大量数据

[英]Processing a large amount of data efficiently with MySQL and PHP

我需要找到一种方法来有效地处理PHP / MySQL中的大量数据。 情况如下:

我有一个数据库表,比如一百万条记录。 根据PHP的用户输入,我需要根据一个非平凡的计算步骤对所有这一百万条记录进行排名,这样我就可以选择得分最高的项目。 我的问题是,如果我将数据重新排列为列并使用array_multisort,那么从内存使用的角度来看,这种扩展性很差,特别是在排序步骤中。

我能想到的替代方法是:

  • 在PHP中进行计算并将带有分数的数据重新插入临时表中,使用SELECT ... ORDER BY score ... LIMIT query检索得分最高的项目
  • 在PHP中进行计算并将带有分数的数据输出到CSV文件中,然后调用命令行排序实用程序,然后读入前X行数
  • 使用存储过程在MySQL中进行计算并检索前X个项目,如选项1所示。我对此问题的关注是DB是否适合数字运算,这将涉及到

对于像搜索引擎这样的事情来说,这必然是一个相当普遍的问题。 可扩展性是首要任务,但性能也必须非常好。 这些方法中的一种是最好的,还是有一些其他很好的选择,我甚至没有考虑过?

假设您的数据集太大而无法存储在内存中....如果您只需要前n个项目,那么当您浏览100万行时,您只能将最高结果保留在内存中。 这也适用于您的临时表概念,编写每批的顶级记录。

另一种选择是编写用户定义的函数:

http://dev.mysql.com/doc/refman/5.1/en/adding-functions.html

存储行时,为什么不进行部分或全部计算。 这样你只需要做一次,你就有很多时间去做。

如果可能的话,在复杂的ORDER BY中执行此操作是您提到的所有选项中最好的。 但对于一百万条记录,您仍会遇到问题。

听起来你正在以艰难的方式做事,试图将所有数据保存在一个地方并动态订购。 有没有办法预先进行评分,即使你在请求时为自定义排序键合并了几个分数?

用户的查询有多复杂? 如果您正在尝试进行全文搜索,则应该获得专门用于该任务的软件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM