你们在论坛程序中怎么记录帖子的浏览量和回复数 , 比如v2ex这个系统 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
skyangel3
V2EX    问与答

你们在论坛程序中怎么记录帖子的浏览量和回复数 , 比如v2ex这个系统

  •  
  •   skyangel3 2013-02-19 08:50:38 +08:00 5238 次点击
    这是一个创建于 4693 天前的主题,其中的信息可能已经有所发展或是发生改变。
    是不是在post 这个数据表中用一个column来记录 ,然后每次都+1如果有人回复的话 特别是回复数, 不是做"select COUNT(*) from comment where post.id = post"的吧?

    如果用上面的这个Query, 是不是特别慢??
    第 1 条附言    2013-02-19 10:41:35 +08:00
    还有像那些流行的程序, disucz, phpwind, phpbb是怎么处理的, 不想自己去看, 大家知道的话, 告诉我一下
    7 条回复    1970-01-01 08:00:00 +08:00
    qichunren
        1
    qichunren  
       2013-02-19 10:13:42 +08:00   1
    posts表中加一个comments_count作cache,create comments和destroy comments时更新comments_count
    ipconfiger
        2
    ipconfiger  
       2013-02-19 10:22:57 +08:00   1
    当浏览量上来后POSTS表会成为热表,频繁的update会频繁的锁行(如果你是INNODB的话),而且MySQL在锁行的时候还会所附近的行,然后就会经常的锁冲突,超时。
    建议存在缓存里,比如memcache,然后定义的更新最新值到数据库用来记录的列,而不要直接频繁的去update
    skyangel3
        3
    skyangel3  
    OP
       2013-02-19 10:35:28 +08:00
    如果有10000个帖子的话, 缓存会消耗多大MB, 还有缓存这么多数据, 会不会有什么不好的地方, 如果重起主机的话, 第一次阅读会不会超级慢 ,

    其实就是select COUNT(*) from comment where post.id = post 对比 select post.count from post where id = id 的速度由多大差距
    @ipconfiger
    ipconfiger
        4
    ipconfiger  
       2013-02-19 10:43:44 +08:00
    @skyangel3
    首先肯定是 select post.count from post where id = id 快。纯读取的话,但是你得考虑更新的问题,频繁update带来的问题很大,如果这样做可以被人很快刷死你的系统,所以需要用缓存或者是通过队列来降低更新频率防止锁冲突造成的性能恶化
    rqrq
        5
    rqrq  
       2013-02-19 12:16:24 +08:00
    不想自己看,我也不想说
    skyangel3
        6
    skyangel3  
    OP
       2013-02-19 13:50:47 +08:00
    这不是交流网站吗?

    我又不是看不懂它们的代码, 只是不想花时间去下载代码, 然后寻找那一行代码, 有不是要大家帮我实现这个功能, 只是要你的IDEA Input而已, 为什么这么有敌意。
    AntiGameZ
        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(具体字段)
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     904 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 20:01 PVG 04:01 LAX 12:01 JFK 15:01
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86