我正在开发一个小型的digg风格的应用程序,每天提交20到100个项目。我需要保持在任何特定时刻存在多少项目的运行轨迹。我知道我没有很多记录,但我仍然认为执行count()是最好的方法,因为我几乎每一页都会这样做。我的想法是创建一个专门用于元值的表,例如total_articles。然后,我会在提交新故事时递增该值,并在删除故事时减小该值。
这是解决此类问题的常见方法,还是有更好的方法?如果这是一个标准的解决方案,在将其作为我的解决方案实施时,我应该注意哪些类型的事情?
答案 0 :(得分:2)
绝对是一种相当常见的问题。这是我要记住的几件事。
您的数据库引擎 - COUNT()
并不一定非常昂贵,它只取决于它的实现方式。例如,如果您使用的是MySQL,COUNT()
对于InnoDB表来说是昂贵的。但是,如果您使用MyISAM表,则记录数已经存储为元数据,并且计数非常便宜。
在阅读量很大的网站上,您使用单独的元数据表的方法效果很好。但是,管理元数据的任务增加了开销。您可以使用数据库触发器或应用程序中的额外代码来处理此问题,但无论如何,如果您管理的是数据,那么对您来说这将是一项额外的工作。
在一个写得很重的网站上,每次记录写入时更新元数据的性能可能超过COUNT()
的读取(或者你可能正在做的任何元提取)。
称量读/写活动可能是谨慎的。听起来你并不期待大量的新记录,所以存储你自己的数量可能会带来性能上升。