jivejdon的问题

07-10-24 tino
我看了其中的MessageDaoSql.java 文件 的getMessage方法,

SELECT threadID, forumID, userID, subject, body, modValue, rewardPoints, "+

"creationDate, modifiedDate FROM jiveMessage WHERE messageID=?

这样的sql语句,要取发帖子的用户名,我以前都是用关联查询来做的,请问你这样的是怎么做??再根据userID去查用户名吗?那样不就多查询一次数据库??还是有什么其他解决方法。。。。

banq
2007-10-25 11:50
>这样的sql语句,要取发帖子的用户名

这个SQL是为了获得一个ForumMessage对象,至于发帖的用户名,这从ForumMessage的Account中获得。虽然分两次读取数据表,但是ForumMessage第一次读取被缓存了,以后就没有数据库访问,所以,不会增加数据库负载,而是减轻负载。这也是围绕对象模型编程和围绕数据表编程的区别。

tino
2007-10-25 13:43
等于就是用缓存来换取数据库的查询,这个很依赖缓存技术的(php就无法实现了,或者php可以用文件缓存来做)

当网站访问量很大的时候,回复帖子很多,这种缓存的作用就越来越小了

或许这个时候矛盾就转移到,程序是为了应付大访问量,还是为了方便大型开发

jive论坛和discuz论坛,在硬件相同的大负载情况下,discuz可能会表现的更好些了

[该贴被tino于2007-10-25 13:47修改过]

banq
2007-10-25 14:59
>当网站访问量很大的时候,回复帖子很多,这种缓存的作用就越来越小了

这个概念也不准确,回帖只是增加新贴,只是这个帖子更新一次,或者说缓存不起作用,其他帖子缓存总是起作用,不可能一个论坛所有帖子都有人回复,所以,不能简单看问题。

tino
2007-10-25 17:29
当网站访问量很大的时候,回复帖子很多, 这个时候是不是要频繁的更新缓存

也有可能大部分的应用都是读的次数大于写的次数

我在考虑的是抛弃left join这样的关联查询是不是最好的方案

猜你喜欢