问: 我们网站有100多万商户信息,如何最快取出最热门的前10个放到首页。
我说用lucene对数据库做索引;
他说太重了;
我说依据查询的where条件建数据库索引;
他说数据库的优化达到极限了;还能不能再改进;
我说使用缓存技术,比如memcached;把热门的top1000放到cache里面。
他对结果都不满意。
但是可怜我一直做应用开发, 这样的案例没接触过,不知道怎么回答。懂的朋友给个方案把,或者讲讲大型互联网公司,比如taobao,都是怎么做top n的。讲的深入全面的更好。上分200.
我说用lucene对数据库做索引;
他说太重了;
我说依据查询的where条件建数据库索引;
他说数据库的优化达到极限了;还能不能再改进;
我说使用缓存技术,比如memcached;把热门的top1000放到cache里面。
他对结果都不满意。
但是可怜我一直做应用开发, 这样的案例没接触过,不知道怎么回答。懂的朋友给个方案把,或者讲讲大型互联网公司,比如taobao,都是怎么做top n的。讲的深入全面的更好。上分200.
1、购买数量;
2、浏览次数;
3、评论次数。那么首先需要有地方记录了这种数据,偷懒的话就可以是数据库。
其次,Top100,需要真的是那一瞬间的Top100么?用户在乎是不是这一瞬间么?
比如可否是截至到00点00分的:昨天Top100?上周Top100?30天Top100?
那么可否每天晚上用批处理将各种分门别类的Top100计算好,然后生成HTML页面,存放在Apache或者EngineX的上就完了?考虑到全国访问的话,可以将HTML页面推给镜像站点的Apache服务器上。
嫌硬盘速度慢的话,可以考虑用2G内存来模拟硬盘,专门存放这种高热点的HTML页面。或者Apache上面直接开MemCache。路数很多就不一一列举了。
打开首页时 ajax加载这个文件 显示出来
1、购买数量;
2、浏览次数;
3、评论次数。那么首先需要有地方记录了这种数据,偷懒的话就可以是数据库。
其次,Top100,需要真的是那一瞬间的Top100么?用户在乎是不是这一瞬间么?
比如可否是截至到00点00分的:昨天Top100?上周Top100?30天Top100?
数据只要操作一次,取数据相当于直接是IO操作,效率肯定比你的数据库取的效率高的多澳~
写个跟前台无关的接口。定义两个map,一个定时去load数据库,一个由前台调用。
第一个map load完后,赋给前台调用的map。map之间赋值很快吧。
我用的是rmi接口,效果不错。
这问的 但凡扯到 数据库SQL查询肯定OVER
这里说了100多万商户 是基本数据吧,热门肯定在这个一百多万上建立的嘛,比如说没访问一下这个商户就会给这个商户增加一点热点的话,可以这样考虑撒,建立一个前十的list有序的装进去,当有访问时,在存进数据库的同时比较下list的,在替换就ok咯撒