【问题标题】:What strategies can an ORM use to cache data while minimizing complexity?ORM 可以使用哪些策略来缓存数据,同时最大限度地降低复杂性?
【发布时间】:2010-11-21 22:39:15
【问题描述】:

如果应用程序请求与最近请求的结果集相似的结果集,ORM 如何跟踪哪些结果是陈旧的,哪些可以从以前重用而不使用太多资源(内存)或创建太多架构复杂性?

【问题讨论】:

  • 除非您自己构建 ORM,否则这是一个奇怪的问题。你到底想做什么?
  • 请仔细考虑您的 ORM 是否需要跨多个进程/机器运行……在这种情况下,缓存层会变得更加困难。

标签: database algorithm design-patterns architecture orm


【解决方案1】:

缓存失效是一件非常棘手的事情。您提出的基本情况似乎最容易由数据库的查询缓存处理(频繁的请求会将查询保留在缓存中)。一旦缓存策略变得比这更复杂,大部分收益将来自手动管理缓存和使用单独的键值缓存存储的缓存过期。

如果这种事情是您的应用程序数据访问的常态,并且您正在尝试新潮的新事物,那么 couchdb 的 mapreduce 视图可能是一个不错的选择。

除了基本的记忆之外,我倾向于将 ORM 级别的缓存视为一个相当挑剔和糟糕的计划。

【讨论】:

  • 我直接引用了 ORM 级别之外的缓存,例如 memcache(我做 web 开发),但是任何键值存储都应该可以工作。本质上,自动进行 ORM 缓存需要大量重复数据库在添加架构和错误时应该做的事情。在大多数情况下,通过显式应用程序级缓存和更好的数据库索引等可以获得更好的性能。
【解决方案2】:

当我需要知道本地数据是否与(远程)服务器同步时,我会跟踪事务。

因此,在“刷新”本地数据之前,我会“查询交易历史记录”,并且如果自上次“刷新”后相关(远程)数据上没有发生任何交易,它仍然是同步的。

但我不知道这是否是“最小化复杂性”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-20
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 2011-01-10
    • 1970-01-01
    • 2020-10-03
    相关资源
    最近更新 更多