我有一个用PHP编写的搜索页面,它需要在MySQL数据库中搜索,结果需要是可排序的。许多用户将访问此搜索页面(任何时候都> 1000)。
但是,在MySQL中对搜索结果进行排序是不可行的,因为它会非常慢。
我正在考虑将每个搜索结果存储到临时表(而不是MySQL临时表)中,并且表名存储在另一个表中以供参考,如下所示:
| id | table_name | timeout |
-----------------------------
| 1 | result_1 | 10000 |
| 2 | result_2 | 10000 |
然后我可以使用临时表在需要时对任何搜索结果进行排序,而无需重构(通过一些修改)查询。
根据指定的超时时间,每个表都将被删除。
假设我无法修改查询中使用的现有表的结构,这是一个很好的解决方案还是有更好的方法?请指教。
由于
答案 0 :(得分:1)
当您只想将搜索结果缓存在内存中时,无需将结果存储在持久性数据库中。您是否需要对关系数据进行索引访问?如果答案是否定的,请不要将其存储在MySQL数据库中。
我知道phpbb(一个支持MySQL后端的开源网络论坛)使用键值存储来支持其搜索结果。如果论坛配置为为您提供指向特定结果页面的链接(在URL的查询字符串中使用搜索ID哈希),那么该链接将暂时有效,但最终会从缓存中刷新,就像您想要的那样。如果你在MySQL上设置,那么实现完整的数据库抽象层可能有点过分。无论如何:
您应该使用memcached或其他东西来存储结果数据,您可以轻松地检索数据并在PHP中对其进行排序。还有一些特定于PHP的缓存框架可以最大限度地降低从解释器加载和卸载数据的成本: