1
ksc010 2013-07-27 09:55:04 +08:00
不是很明白
是不是说 我搜索 name=jack&max-age=20 而程序把这个条件存储起来,并且有个key 比如是23 这样我访问 search.php?key=23 实际上就是 search.php?name=jack&max-age=20 |
2
Windweller OP @ksc010 嗯。。我用的是uri处理。。所以最后结果看起来是search.php/23/。。基本思路就是把存储条件给存进数据库里。
|
3
ksc010 2013-07-27 10:10:30 +08:00 1
有大站这样用么
我知道的是ecshop搜索的时候 先把搜搜条件给base64成一长串字符 看起来就像是这样search.php?encode=YToyOntzOjgDoic2VhcmNoX2VuY29kZW1lIjtpOjEzNzQ4OTA4OTA7fQ== |
4
qiayue 2013-07-27 10:18:28 +08:00
注意,你写的是博客程序,就自己一个人用的程序,访问量能大到哪里去,每天几十万 UV 算是顶天了,估计一开始每天几百个上千个 UV 就不错了。
你所有的担心都是猜测而已,不是实际发生的,完全没必要提前去优化。 另外,反而,有些访问量很大的网站(比如电影天堂),他故意这么做,因为他把搜索结果给缓存起来了,网站用起来更快了。 |
5
rwx 2013-07-27 10:35:01 +08:00
这种方式一般是缓存起来避免同条件搜索的时候翻页还要再次检索数据库吧?
个人博客的话不是访问量超大或者数据量超大基本用不上这种优化方式。 而且直接使用google站内搜索会更好。 |
6
Windweller OP @qiayue 是缓存的搜索结果,而不是搜索字符吧?(我目前只知道存搜索字符的方法。。)请问搜索结果是怎么存到数据库的呢?
|
7
darasion 2013-07-27 11:20:00 +08:00
撸主不必担心这事儿。甚至也不需要缓存啥东西。因为一个人做的不可能搞这么多东西进去。
放心,如果你的访问量上来了也许你就开始雇人做事当老板了。 即便是访问量和数据量巨大,也是有办法的。 中国的网页总数,也就 几个1000000亿 左右,都有办法存的。 |
8
shinwood 2013-07-27 11:36:23 +08:00
可参见 Discuz 对帖子搜索的缓存机制,用一个search 表缓存搜索到的帖子的 tid,显示到前端用 WHERE IN 的方式,这种情况可能适合搜索的帖子不是百万千万级的,不然搜索表够大。
至于定期清空就更容易了,在 search 表中加一个 expiry 字段,设定失效秒数,后台定期手工运行或者写个清理 hook 到程序中即可。 |
9
shinwood 2013-07-27 11:36:23 +08:00
可参见 Discuz 对帖子搜索的缓存机制,用一个search 表缓存搜索到的帖子的 tid,显示到前端用 WHERE IN 的方式,这种情况可能适合搜索的帖子不是百万千万级的,不然搜索表够大。
至于定期清空就更容易了,在 search 表中加一个 expiry 字段,设定失效秒数,后台定期手工运行或者写个清理 hook 到程序中即可。 |
10
qiayue 2013-07-27 11:37:20 +08:00 1
@Windweller
搜索结果也是可以缓存的,我说其中一种方法: 特定网站的搜索结果其实是一串同类 ID ,比如博客的搜索结果是文章 ID ,电影天堂的是影视剧 ID 。 你把这一串 ID 跟搜索字符串的关系存进数据库,再把每一个对象按照 ID 缓存。 搜索请求过来,根据字符串获取到搜索结果 ID ,再从缓存中根据 ID 一个一个把对象找出来,发给页面显示。 关于缓存请看 范凯 的 Web应用的缓存设计模式 http://robbinfan.com/blog/38/orm-cache-sumup |
11
Loveyuki 2013-08-01 20:10:03 +08:00
小型网站怎么做都不会出现太大的性能问题。
大型网站肯定实现了自己的搜索引擎,也不会纠结于此。 所以如果你喜欢这样就可以去试着做做看。要勇于尝试。 |