php - 随机排序的多次搜索的性能

标签 php mysql apache

我正处于一个网站的设计阶段,我有一个功能解决方案,但我不知道当网站(希望如此)增长时它是否会是一个好的解决方案。我希望用户能够为其他用户执行搜索,并且必须对他们找到的结果进行排序:首先是“聚焦”的用户,然后是所有其他用户。结果必须随机排序,遵守前面提到的顺序,并分页。

我想到的解决方案之一是将查询结果存储在服务器端的 session 变量中。为了提高性能,当用户离开搜索时,此变量将被销毁。

当网站拥有成千上万的用户并且每天执行数千次搜索时会发生什么?我的解决方案是可行的还是服务器会重载?

我有更多的解决方案,比如一个中间表,每天 n 次用户按上述顺序转储。这样就不需要在用户 session 中创建一个大数组,分页是通过对数据库的多次查询完成的。

虽然我很感激任何建议,但我特别感兴趣的是听取在迁移站点方面经验丰富的开发人员的意见。

(使用的技术是LAMP,有InnoDb表)

最佳答案

过早的优化是不好的。但是您应该提前计划。您不需要实现它。但要做好准备。

如果每天有成千上万的用户搜索此查询,那么在 session 中缓存查询结果并不是一个好主意。因为可以为某些用户缓存相同的结果,而其他用户需要执行它。对于这种情况,我建议您将搜索结果保存在用户独立的数据结构(文件、内存等)中。

  1. 对于每个搜索查询,将结果、创建日期、最后访问日期保存在您的磁盘或内存中。
  2. 如果任何用户搜索相同的查询,则显示缓存中的结果
  3. 运行一个 cron,在一段时间后使缓存失效。

通过这种方式,频繁的搜索将在大多数时间迅速可用。它还减少了数据库的负载。

关于php - 随机排序的多次搜索的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9488251/

相关文章:

php - 使用 php 跟踪文件下载进度

php - 插入到已有数据的表中

php - 自动解析PHP将PHP代码从HTML中分离出来

php - cakephp sql 注入(inject)验证失败

python - Apache 在我的 django 应用程序中使用 mod_wsgi 显示 404 错误

linux - 如何使用 Curl 打开安全站点

php - 用户友好的时间输入

MySQL - 如何优化长时间运行的查询

mysql - 我是否正确加入了这 4 个表?

mysql - MAMP - 突然在我的本地主机上收到 404s