我有一个“得分”我需要为多个用户计算多个项目。每个用户都有许多独特的分数,计算可能是时间/处理器密集型的。 (缓慢不在数据库端)。为了解决这个问题,我正在大量使用memcached。没有memcache,一些页面需要10秒才能加载! Memcache似乎运行良好,因为分数是非常小的信息,但需要一段时间来计算。我实际上将密钥设置为永不过期,然后我会在分数发生变化的偶然情况下删除它们。
我正在进入这个产品的新阶段,我正在考虑重新设计整个产品。似乎有一种方法可以迭代计算值,然后将它们存储在本地字段中。这有点类似于现在发生的事情,只是价值更新会更快发生,缓存将在真实数据库中,管理它将会更多一些工作(我想我仍然会在顶部使用memcache虽然如此。
如果重要的话,它全部在python / django中。
是否打算像这种不良做法一样在缓存上?好吗?为什么?我应该尝试重新设计一些东西吗?
答案 0 :(得分:2)
如果没有破坏...不要修理它; ^)看来你的方法正常,所以我会说坚持下去。您可以查看memcachedb(或tokyo cabinet),它是memcache的持久版本。这样,当memcache机器崩溃并重新启动时,它不必重新计算所有值。
答案 1 :(得分:1)
你在这里应用了几种建筑模式,每一种都确实有一个地方。这里没有足够的信息来评估您当前的解决方案是否需要重新架构或者您的想法是否有效。对我而言,似乎有可能随着您对用户需求的理解的增长,您可能希望改进。
与往常一样,原型,测量性能,考虑复杂性和性能之间的权衡 - 您不需要尽可能快,只需足够快。
各种形式的缓存通常是良好性能的关键。这里的问题是,是否有必要坚持这些有价值的,有价值的价值观。如果它们随着时间的推移而稳定,那么这通常是一种有效的策略。是否在数据库模式中保留缓存或为它们腾出空间可能取决于访问模式。我有各种查询路径,然后精心设计的数据库方案可能是合适的。
答案 2 :(得分:0)
尝试将计算得分存储在与其他数据相同的位置,而不是使用memcached;这可能更简单,需要更少的盒子。
Memcached不一定是一切的答案;它适用于需要高度读取的系统。听起来像你的情况,它不需要,它只需要更高效。