1
qichunren 2013-02-19 10:13:42 +08:00 1
posts表中加一个comments_count作cache,create comments和destroy comments时更新comments_count
|
2
ipconfiger 2013-02-19 10:22:57 +08:00 1
当浏览量上来后POSTS表会成为热表,频繁的update会频繁的锁行(如果你是INNODB的话),而且MySQL在锁行的时候还会所附近的行,然后就会经常的锁冲突,超时。
建议存在缓存里,比如memcache,然后定义的更新最新值到数据库用来记录的列,而不要直接频繁的去update |
3
skyangel3 OP 如果有10000个帖子的话, 缓存会消耗多大MB, 还有缓存这么多数据, 会不会有什么不好的地方, 如果重起主机的话, 第一次阅读会不会超级慢 ,
其实就是select COUNT(*) from comment where post.id = post 对比 select post.count from post where id = id 的速度由多大差距 @ipconfiger |
4
ipconfiger 2013-02-19 10:43:44 +08:00
@skyangel3
首先肯定是 select post.count from post where id = id 快。纯读取的话,但是你得考虑更新的问题,频繁update带来的问题很大,如果这样做可以被人很快刷死你的系统,所以需要用缓存或者是通过队列来降低更新频率防止锁冲突造成的性能恶化 |
5
rqrq 2013-02-19 12:16:24 +08:00
不想自己看,我也不想说
|
6
skyangel3 OP 这不是交流网站吗?
我又不是看不懂它们的代码, 只是不想花时间去下载代码, 然后寻找那一行代码, 有不是要大家帮我实现这个功能, 只是要你的IDEA Input而已, 为什么这么有敌意。 |
7
AntiGameZ 2013-02-19 14:02:28 +08:00 1
@skyangel3 你不想看,人家不想说,这很天经地义的吧?
像Discuz,它在Post上还有Thread这个表,把主题本身的回复数,查看数放到Thread表里记录。也就是说,作为楼主发帖时,数据库会创建一条Thread,一条Post记录(实际上没这么简单)。回贴的只是在同一个ThreadId下多给Post加了一条记录。总之,都会在某个表里,留下帖子的回复数和查阅数 数据量和访问量上来了,不管什么样的数据库结构,都会要用到cache。10000的帖子根本不叫数据量,何况缓存的时候,也没有人会所有信息连文字连图都缓存,挑一些信息出来呗。再说,如果真的是有10000个热帖非缓存不可,估计到时候你也不会为了这点小技术细节担心了吧:) 另外,select count (*) 这种查询的效率问题是老生常谈了,尽量避免 。要用的时候请用 select count(具体字段) |