我正在使用ASP.net和SQL数据库。我有一个博客喜欢系统,其中一些评论是针对一个帖子进行的,我想显示帖子旁边的评论数量。为了得到这个数字,我可以将它保存在帖子记录中,并在添加或删除评论时添加/减去,或者我可以在用户每次点击页面时使用SQL来计算查询的数量。后者似乎是一个坏主意,因为它会打击我的SQL数据库更困难,但保持数字对记录感觉像它可能容易出错。你认为在这种情况下最好的编码实践是什么?计算评论数/帖子数
回答
总是从规范化的数据库开始(第二个选项)。如果您对性能原因有绝对必要性,则必须进行非规范化处理。以非规范化的方式进行设计(如您猜测的那样容易出错)是不成熟的优化。有了适当的指数,它应该很好地计算飞行中的数字。
我认为SQL语句应该没问题。另一个是你已有的数据重复。计数查询应该很快。
不要过早优化。仅在需要时才在优化中使用简单的解决方案和页面错误。
我会查询数据库每次你想要的信息。如果您发现性能不足(稍后优化),我会在稍后重新访问它。对于大多数博客类型应用程序将获得的流量来说,这应该足够了。
根据您的数据模型的外观...不要将总发布数添加到主线程记录中,这是容易出错的,您应根据线程ID计算需要的注释数,恕我直言
如果您担心发生针对db的查询次数,缓存页面并更新该缓存作为注释被添加/删除将是一个很好的选择长SQL查询。
也许得到作为主线程查询的一部分进行计数,以便限制来自Web服务器的实际数据库的点击次数。但是我会一直查询实际数量,而不是试图将其保留在一个领域,数据最终会失去同步,因为这是现实。
我通常使用索引视图这种事情。这使您可以对数据进行非规范化处理以进行快速检索,但无法使其不同步。人们也不会感到困惑,并认为该观点是数据的主人。我主要使用SS2K5的标准sku,所以我必须指定(noexpand)提示才能真正使用视图上的索引(企业会自动执行此操作)。所以对于标准的sku,我总是创建一个每个人都打的包装视图,所以我知道这个提示总是存在。
网页上的编码本,所以希望没有语法错误;)
create view postCount__
as
select
threadId
,postCount=count_big(*)
from thread
group by threadId
go
create unique clustered index postCount__xpk_threadid on postCount__(threadId)
go
create view postCount
as
select
threadId
,postCount=cast(postCount as int)
from postCount__ with (noexpand)
go
于是我就用实际索引视图中的命名让大家知道不直接查询。相反,他们会查找强制执行noexpand提示的关联包装视图。使用索引视图迫使你执行count_big,所以我经常在包装视图中将其转换为int,以便能够使用32位整数来持久保留我们的asp.net代码。省略演员会更好,但对我来说没有任何重大影响。
编辑 - 我可以告诉你,论坛软件总是非规范化帖子数到线程表。如果你有一个活跃的论坛,它会杀死数据库以不断计算每个页面视图的帖子数量。我喜欢mssql对索引进行索引,因此您可以声明性地定义非规范化,而不是自己维护它。
为了提高性能,您可以在主表中保留一个标记,以指示该项目是否有任何评论,但仅将其用作'提示',以指示是否执行额外的查询来计算并检索评论以后的时间。
想象一下,照片库会返回50张照片来旋转。每张照片都可以有自己的评论。
初始页面加载将返回一张照片列表以及一个指示照片是否有评论的标志。
当显示照片时,如果评论标志设置为True,您的应用程序将发出ajax请求来计算并获取该照片的评论。
如果50张照片中只有3张有评论,那么您只需要保存47个附加请求!
这确实使数据非规格化,但在有限的水平上。 创建提示确实可以帮助提高非常繁忙的站点的性能。
- 1. Cakephp根据评论数量计算帖子的排名
- 2. 在论坛上计算帖子数量
- 3. 最有效的博客数据库设计(帖子和评论)
- 4. WordPress的,排序帖子按评论计数
- 5. 获得对整个网站上的帖子的评论计数
- 6. Facebook评论Facebook的帖子?
- 7. 对帖子的评论(PHP)
- 8. 如何计算JIRA中的评论数
- 9. 计数的评论者数
- 10. mysql - 从评论数和用户,帖子和评论表中获得所有帖子
- 11. 鬼1.0 Disqus评论的数量而不是反映了帖子评论
- 12. 在reddit评论数据集中 - 哪些帖子上传到1000评论最快?
- 13. Facebook评论部件在帖子中分享评论
- 14. 使用Django时出现“评论帖子不允许(400)”评论
- 15. 访问current_user评论过的所有帖子的所有评论
- 16. 计算每个帖子的投票数
- 17. form_for嵌套资源(帖子,评论)
- 18. 我如何评论我的帖子?
- 19. Python烧瓶|显示帖子评论
- 20. 获取有关帖子的评论
- 21. FB API。删除帖子或评论
- 22. Ruby on rails对帖子的评论
- 23. 如何拉新帖子和评论
- 24. Rails显示帖子最新评论
- 25. 获得每个帖子的评论
- 26. 简单的帖子/评论航线3
- 27. 查找最多评论的帖子
- 28. Rails协会的用户/帖子/评论
- 29. Laravel Pass对帖子的评论
- 30. 自定义WordPress评论帖子查询
我喜欢这个答案与Jesse Brown的答案相结合:非规范化将是“你已有的数据重复”。 – Travis 2009-05-01 20:48:04