我有一个用PHP编写的搜索页面,它需要在MySQL数据库中搜索,结果需要是可排序的。此搜索页面将由许多用户(任何时候>1000)访问。
但是,在MySQL中对搜索结果进行排序是不可行的,因为它会非常慢。
我正在考虑将每个搜索结果存储到一个临时表(而不是MySQL临时表)中,表名存储在另一个表中以供参考,如下所示:
| id | table_name | timeout |
-----------------------------
| 1 | result_1 | 10000 |
| 2 | result_2 | 10000 |然后,只要需要,我就可以使用临时表对任何搜索结果进行排序,而不需要重新构造(经过一些修改)查询。
将根据指定的超时时间删除每个表。
假设我不能修改查询中使用的现有表的结构,这是一个好的解决方案还是有更好的方法?敬请指教。
谢谢
发布于 2011-10-19 10:08:40
当您只想在内存中缓存搜索结果时,没有必要费心将结果存储在持久数据库中。您是否需要对关系数据进行索引访问?如果答案是否定的,请不要将其存储在MySQL数据库中。
我知道phpbb (一个支持MySQL后端的开源网络论坛)使用键值存储来支持它的搜索结果。如果论坛被配置为给你一个特定结果页面的链接(带有URL查询字符串中的搜索id散列),那么这个链接将在一段时间内有效,但最终会被从缓存中清除,就像你想要的那样。但是,如果您是在MySQL上设置的,那么实现一个完整的数据库抽象层可能过于夸张了。不管怎么说:
http://wiki.phpbb.com/Cache
您只需使用memcached或其他工具来存储结果数据,就可以轻松地检索数据并在PHP中对其进行排序。还有一些特定于PHP的缓存框架,可以最大限度地减少从解释器加载和卸载数据的成本:
https://stackoverflow.com/questions/7815723
复制相似问题