2009-08-22 34 views
2

如果应用程序要求设置一个类似的结果,最近被要求,如何才能对ORM跟踪哪些结果是陈旧的,并且可以从之前没有使用太多的资源(内存)被重复使用或产生过多的建筑复杂?ORM可以使用什么策略来缓存数据,同时将复杂性降至最低?

+0

除非你自己构建ORM,否则这是一个奇怪的问题。你究竟想要做什么? – Juliet 2009-08-22 18:16:36

+0

要小心考虑您的ORM是否需要跨多个进程/机器运行......在这种情况下,缓存层会变得更加困难。 – 2009-08-22 20:04:34

回答

2

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

如果这类事情是您应用程序数据访问的标准,并且您正在尝试新潮时髦的新事物,那么couchdb的mapreduce视图可能会非常适合。

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

+1

我直接引用了像memcache之类的ORM级别之外的缓存(我是web dev),但任何键值存储都应该可以工作。从本质上讲,自动做ORM缓存将需要大量的东西,同时增加建筑和错误数据库应该做的重复。在大多数情况下,通过显式的应用程序级缓存和更好的db索引等可以更好地获得性能。 – 2009-08-22 19:00:14

1

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

所以之前的“提神”本地数据I“查询交易历史”,如果对有关(远程)数据没有发生任何交易,因为最后的“刷新”,它仍然保持同步。

但我不知道它是否“尽量减少复杂性”。