我正在开发一个用户提供参数的Web应用程序,这些用于生成最多2000万行数据库中前1000个项目的列表。我一次需要所有前1000个项目,我需要从用户的角度或多或少地立即发生这种排名。
目前,我正在使用具有用户定义函数的MySQL对数据进行评分和排名,然后PHP从那里获取它。在1M行的数据库上测试,这需要大约8秒,但我需要大约2秒的性能,即使对于最多20M行的数据库也是如此。优选地,该数量应该更低,以便保证最多50个同时用户的良好吞吐量。
我对任何能够尽可能高效地处理这些数据的软件开放,无论是否是MySQL。以下是该过程的功能和限制:
由于
答案 0 :(得分:1)
一种可行的方法似乎是将所有数据加载(并稍后更新)到大约1GB的RAM中,并使用像C ++这样的语言在MySQL之外执行评分和排名。这应该比MySQL快。
对于这种方法,评分必须相对简单,因为您的要求每行只留下十分之一微秒的评分和排名而没有并行化或优化。
答案 1 :(得分:0)
如果您可以发布查询,那么您可以提供帮助。
虽然这里有些东西。 确保在数据库上创建了索引。 确保使用优化查询并使用连接而不是内部查询。
答案 2 :(得分:0)
根据您的标准,提高性能的可能性取决于您是否可以使用输入条件预先过滤您需要计算分数的行数。即如果其中一个用户提供的参数自动取消了大部分行的资格,那么首先应用该过滤将提高性能。如果没有任何参数具有该特性,那么您可能需要更多硬件或具有更高性能的数据库。
答案 3 :(得分:-1)
我会说这个问题,如果你已经完成了所有明显的软件优化(我们无法知道,因为你没有提到任何关于你的软件方法),你应该尝试一些严肃的硬件优化。最大化SQL服务器上的内存,并尝试尽可能使表适合内存。将SSD用于表/索引存储,以便快速反序列化。如果您是群集的,请将网络提升到最高可行的网络速度。