我在编写一个小脚本,用于在用户之间引用数据。每个用户对“特征”都有一个特定的计数。例如,特征A是(悲伤,快乐,生气),特征B是(晴天,多云,雷雨)。这些特征的当前总行数为200,000,涉及1000个用户。算法很简单:对于每个用户,计算特征,计算每个特征中最高的条目(A -> 悲伤,B -> 雷雨),并将其作为用户总特征计数的百分比。我现在得到的是一个用户的“评级”,我将其与数据库中的所有用户进行比较(是的,通过再次重复这个过程)。基于假设所有用户的最高特征 + 最高特征 + 最高特征等,与所有用户进行比较,可以得出用户之间的某种相对相似性。
问题是,我在Linode的4核Xen实例上使用PHP来做这件事。速度不是很快。目前最大限度地使用了一个核心,另一个核心使用了30%,其余的则处于闲置状态。脚本可以优化,但我真的想弄清楚如何设置以使其运行得更快。我需要什么样的架构来实现这一点?
我知道这是一个非常广泛的问题,但我希望有人能给我一些指导。任何帮助都将不胜感激!
此致,
Reinder
回答:
我发现罪魁祸首是mysqli->fetch_assoc(),它在等待硬盘为PHP提供额外资源。我通过一次性从数据库中获取所有结果,然后再进行处理,而不是逐一获取和处理,使过程变得更快。