2012-01-24 42 views
1

我正在建立一个网站使用PHP/MySQL的地方会有帖子和评论。寻找推荐的方法来存储/缓存计数

帖子需要显示他们有多少评论。我在Posts表中有count_comments列,并在每次创建或删除评论时更新它。

最近有人告诉我说,这种方式的防篡改是一个坏主意,我应该使用缓存来代替。

+0

发布和评论表之间是否有任何表关系? – sathishkumar

+1

不同的人担心不同的事情。如果你对编程不熟悉,你应该专注于学习和工作,而不是小小的花絮。当我开始构建时,我使用MySQL来完成所有任务,并逐渐将更多内容缓存到缓存中。 – animuson

+0

关键数据不是一个好主意,因为它可能会失去同步,除非你非常小心。在你的情况下,它会节省一些查询时间,如果有80条评论,但它说81 - 而不是世界末日。你的权衡。每隔一段时间,您都可以运行一个过程来纠正任何错误。 –

回答

2

我的是:你正在做正确的事。这是为什么:

实地看count_comments为是你的数据模型的一部分 - 这是很容易证明的,可以删除该字段的所有内容,这是微不足道的重建。

而是把它看成是缓存,存储其中的仅仅是共同位于后 - 非常聪明,当你得到它是免费的,只要你有欲查询的博文

+0

我对此感觉完全一样。 – DavidW

0

我不知道什么是“缓存”的意思,我会感兴趣的一些其他的答案是,一个我要提供:

删除冗余信息从数据库中是很重要的,并且在“信徒的方式“(意思是我没有真正测试它,它仅仅是推测性的),我认为使用数据库中的SUM()函数是更好的方法。 假设您的所有意见有POST_ID,所有你需要的是这样的:

SELECT SUM(id) FROM comments WHERE id = {post_id_variation_here} 

这样一来,可以减少1个常数CRUD发生只是读多少评论也有和提高性能。

1

我不认为这是一个坏方法。

我承认的一件事是,它非常容易引入副作用,因为代码库通过采用更严格的方法而得到扩展。好的部分是在某些时候数据库中的行数必须被计算或保持跟踪,没有办法摆脱这种情况。

我不会建议这个。还有其他解决方案可以获得评论数量。退房Which is fastest? SELECT SQL_CALC_FOUND_ROWS FROM `table`, or SELECT COUNT(*)

解决方案选择速度较慢,但​​需要较少的代码来跟踪评论计数。


我会说你的方法避免了极限DE优化,这是一个加号。

0

除非你有没有对您的应用程序每秒命中数百或数千也没什么不好有关使用一个SQL语句是这样的:

select posts_field1, ..., (select count(*) from comments where comments_parent = posts_id) as commentNumber from posts 

你可以反正缓存页面的HTML输出去。比根本不需要完成数据库查询。

0

Maby你可以将发表和评论表彼此连接起来,并用mysql函数:mysql_num_rows计算mysql中的评论行。像这样:

邮政表

postid* 
postcontent 

评语表

commentid 
postid* 
comment 

再算上像MySQL的评论:

$link = mysql_connect("localhost", "mysql_user", "mysql_password"); 
mysql_select_db("database", $link); 

$result = mysql_query("SELECT * FROM commenttable WHERE postid = '1'", $link); 
$num_rows = mysql_num_rows($result); 
1

这是一个几乎从不需要的优化,有两个原因:

1)正确的索引将使得简单的计数速度非常快。确保您的comments.post_id列具有索引。

2)当您需要缓存此值时,您需要缓存更多。如果您的网站有很多您需要缓存评论总数的帖子,评论,用户和流量,那么您几乎肯定需要为您的大部分数据/输出采用缓存策略(将内置页面保存为静态,memcache,等等。)。毫无疑问,这些策略将涵盖您的评论总数,从而使表格字段方法没有意义。

+0

对我来说,测量这些速度是最好的选择,但我没有要测量的数据,所以我想我可以确定某天的网站是否变得很大。 – DavidW