龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > asp.net编程 >

分布式缓存memcached出现服务停掉的原因分析与处理过程(2)

时间:2009-12-21 11:47来源:未知 作者:admin 点击:
分享到:
解决问题 但是问题并没有真正解决,真正的问题是在添加评论时对blog_Content表FeedBackCount字段的更新。 针对这个问题,我采用一种解决方法:在插入评论时

  解决问题

  但是问题并没有真正解决,真正的问题是在添加评论时对blog_Content表FeedBackCount字段的更新。

  针对这个问题,我采用一种解决方法:在插入评论时不进行Update操作,而是将评论所属的文章ID插入另外一张表中,表结构如下:

CREATE TABLE [dbo].[blog_Comment_CountLog](
[EntryID] [int] NOT NULL,
[FeedbackCount] [int] NOT NULL
)

  插入评论时,进行下面的操作:  

INSERT INTO blog_Comment_CountLog(EntryID,FeedbackCount)VALUES(@ParentID,1)

  显然,这个插入操作速度很快。

  删除评论时,进行下面的操作:

INSERT INTO blog_Comment_CountLog(EntryID,FeedbackCount)VALUES(@ParentID,-1)

  那么怎么更新文章的评论数呢?

  然后通过SQL Server的任务计划定时执行存储过程进行更新:

SET XACT_ABORT ON
BEGIN TRANSACTION
UPDATE [blog_Content]
SET [FeedBackCount] = [FeedBackCount]+CommentCount
FROM [CNBlogs].[dbo].[blog_Content] A
INNER JOIN
(
SELECT EntryID,SUM(FeedbackCount) AS CommentCount FROM blog_Comment_CountLog GROUP BY EntryID ) AS B
ON A.ID=B.EntryID
DELETE blog_Comment_CountLog
COMMIT TRANSACTION

  这样还会带来批量更新的好处,在这个任务计划的间隔时间内添加评论,如果属于同一篇文章,只要执行一次更新操作。

  采用这个方法后,发表评论的性能有了明显提升,现在大家发评论可以看到评论提交的执行时间。

  小结

  在处理问题时,不要着急,要全面分析,把可能引起问题的因素尽量多地考虑到,在动手解决问题之前,多花些时间考虑从何处下手。

  在开发中,异步是一个提高性能的有效方法。

  在我们解决各种问题的过程中,从网上获得了很多启发,如果有人遇到过类似问题并分享了自己的处理经验,会节省我们很多时间。

  大家遇到问题时多数会先Google一下吧,如果大家都只想着Google一下,而不去分享,这个生态链就很难维系。别人的分享帮助了你,你的分享帮助了别人,在这种互相帮助中,大家都会进步。

  在刚解决一个问题的时候,是分享的最佳时期,如果此时不分享,也许就永远不会分享,分享的不仅是解决问题的方法,更是解决问题时的那种兴奋。这种兴奋是程序人生的乐趣所在!


精彩图集

赞助商链接