各位大侠,本人想开发类似校内这样的SNS网站,现在有几个技术问题,不知道怎么实现的,特此请教:
1、校内在线人数很多,但发布消息却很快就能显示出来,感觉不是直接写入数据库的,是否采用消息队列之类的技术?求教具体思路是怎么样的
2、发布即时消息功能是否是使用comet长连接实现的?
3、如果我发布一条新信息,我的全部好友都会显示这条信息,这部分功能数据库怎么设计,才能达到数据库性能的最优呢?
------解决方案--------------------
在线用户多不代表操作用户多,即使操作,读也远大于写,所以通常都是利用缓存,对于刚发布的新日志,添加到缓存中,或者在一段时间内访问量较高的日志,也放到缓存中,甚至可以利用CDN,这样一来,当某个人登录时,会自动从缓存中,通过字典或者哈希的方式,从缓存中找出好友最新发表的日志,并按时间排列,所以效率很高,但后台需要一个线程用于将过期的日志从缓存中踢出,至于队列,如果你觉得用户发帖量会特别大的话,可以考虑使用队列,但个人觉得没必要,因为在数据里一般也就是一个插入操作,以及附带的一些操作,不产生锁表等行为,不会对服务器造成特别大的压力,至于使用comet,显然是不可能的,首先这种网站不需要实时性,因为文章发布上去以后变化的可能性不大,其次comet会给服务器造成很大的负担,而日志由于数据较多,则可以采用分表的形式,写一个作业,定期将过期的日志转入旧日志表中。