我需要找到一种方法来有效地处理PHP / MySQL中的大量数据。情况如下:
我有一个数据库表,比如一百万条记录。根据PHP的用户输入,我需要根据一个非平凡的计算步骤对所有这一百万条记录进行排名,这样我就可以选择得分最高的项目。我的问题是,如果我将数据重新排列为列并使用array_multisort,那么从内存使用的角度来看,这可能会非常糟糕,尤其是在排序步骤中。
我能想到的替代方法是:
这对搜索引擎等问题来说是一个相当普遍的问题。可扩展性是首要任务,但性能也必须非常好。这些方法中的一种是最好的,还是有一些其他很好的选择,我甚至没有考虑过?
答案 0 :(得分:1)
假设您的数据集太大而无法存储在内存中....如果您只需要前n个项目,那么当您浏览100万行时,您只能将最高结果保留在内存中。这也可以与你的临时表概念一起使用,编写每批的顶级记录。
另一种选择是编写用户定义的函数:
http://dev.mysql.com/doc/refman/5.1/en/adding-functions.html
答案 1 :(得分:1)
存储行时,为什么不进行部分或全部计算。这样你只需要做一次而且你有很多时间去做。
答案 2 :(得分:0)
如果可能的话,在复杂的ORDER BY中执行此操作是您提到的所有选项中最好的。但是对于一百万条记录,你仍会遇到问题。
听起来你正在以艰难的方式做事,试图将所有数据保存在一个地方并动态订购。有没有办法预先进行评分,即使你在请求时为自定义排序键合并了几个分数?
用户的查询有多复杂?如果您正在尝试进行全文搜索,则应该获得专门用于该任务的软件。