【发布时间】:2012-05-15 12:47:51
【问题描述】:
我知道这是一个特定于应用程序的问题,但我想看看是否有人有一个我没有想到的聪明的解决方案。这是一个艰难的问题,因此对于任何可以优雅地解决这个问题的人来说都是要点(和道具)。
我有一个 ruby on rails 应用程序,它具有包含任务计数的全局导航(见下图)
问题是生成这些计数需要一些密集的查询。而且因为它是全球性的,它在每一页上。当人们处理任务时,它们还需要更新。这使得它特别具有挑战性。
也就是说,现在我正在通过 memcached 将导航 HTML 缓存 10 分钟。如果有人负责一项任务,哦,好吧。导航每 10 分钟更新一次。糟糕的解决方案,我知道,但在我想出合适的解决方案之前,这是我的权宜之计。
我想避免在整个应用程序中添加一堆钩子(例如:处理交付,触发钩子以减少每个相关用户的计数)。请记住,这些计数涉及系统中的许多实体,并且逻辑有些复杂。它处理访问(每个用户根据权限系统有不同的计数),并且在某些情况下确定这些计数可能很复杂。 Hooks 很快就会变得一团糟,并且生成这些计数背后的逻辑将被重复。
任何帮助将不胜感激。
【问题讨论】:
-
好问题。您对导航 HTML 所做的是缓存,那么为什么不应用相同的缓存概念将值存储在“计数”表中呢?毕竟,在某些时候,某些钩子会减少计数,因此请减少表中的计数。也应该有一些设计模式(希望如此)。
标签: ruby-on-rails ruby performance task