我正在开发一个Web应用程序,并希望能够向用户显示有关不同对象的一些计算统计信息。一些很好的例子是:这个网站上的“热门问题”页面 - SO - 列出了“投票”,“答案”,“视图”或“评论”和“赞”,列出了Facebook上的帖子列表新闻Feed。实际上这些计算值在整个网络上使用,我不确定实现它们的最佳方法。
我将更详细地描述问题的一般视图。我的数据库中有一个父表(您可以将其显示为博客文章)。此表与其他5个表具有一对多的实现关系(将其可视化为注释和喜欢等)。我需要使用每个相关子对象的计数来显示约20个父表对象的列表(将其可视化为博客帖子列表,每个博客帖子显示总体数量和喜欢的总数)。我可以想出多种方法来解决这个问题,但我不确定哪个是最快,最准确的。
以下是我提出的一些选择......
A)SQL触发器 - 创建一个触发器,以便在子表执行插入和删除时递增和递减父表上的计算计数列。不确定每次创建或删除小子对象时运行触发器的性能权衡。我也不确定潜在的并发问题(尽管在我当前的架构中,数据库中的每一行只能由行创建者添加或删除。)
B)SQL视图 - 只是一种更简单的查询方式,并且会产生准确的结果,但我担心这种视图的性能影响。
C)SQL索引视图 - 索引视图准确且可能更快,但由于每个子表都有可以添加或删除的行,因此必须不断重新计算视图。
D)缓存更改 - 某种临时进程解决方案,它会缓存对子表的更改,计算对计数的净更改,并根据某些参数将它们刷新到db。这可能与一个经常检查准确性的过程相结合。E)我还没有想到的东西很棒:)如何跟踪soooo很多统计数据?
**请记住,我正在构建自定义的东西,它不是博客/ FB / SO,我只是将它们用作类似问题的一个例子,所以建议只使用这些网站是无益的;)我我很想知道如何在处理大量请求的实时网络应用程序中实现这一点。
感谢提前