Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database ORM可以使用什么策略来缓存数据,同时最小化复杂性?_Database_Algorithm_Design Patterns_Architecture_Orm - Fatal编程技术网

Database ORM可以使用什么策略来缓存数据,同时最小化复杂性?

Database ORM可以使用什么策略来缓存数据,同时最小化复杂性?,database,algorithm,design-patterns,architecture,orm,Database,Algorithm,Design Patterns,Architecture,Orm,如果应用程序请求与最近请求的结果集类似的结果集,ORM如何跟踪哪些结果过时,哪些结果可以从以前重新使用,而不使用太多的资源(内存)或造成太多的体系结构复杂性?缓存失效是一个非常棘手的问题。您提出的基本情况似乎是最容易由数据库的查询缓存处理的(频繁的请求将使查询保持在缓存中)。一旦缓存策略变得比这更复杂,大部分收益将来自使用单独的键值缓存存储手动管理缓存和缓存过期 如果这类事情是应用程序数据访问的标准,并且您正在尝试流行的新事物,那么couchdb的mapreduce视图可能非常适合 除了基本的记

如果应用程序请求与最近请求的结果集类似的结果集,ORM如何跟踪哪些结果过时,哪些结果可以从以前重新使用,而不使用太多的资源(内存)或造成太多的体系结构复杂性?

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

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


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

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

因此,在“刷新”本地数据之前,我会“查询事务历史记录”,如果自上次“刷新”以来,相关(远程)数据上没有发生任何事务,那么它仍然是同步的


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

除非您自己构建ORM,否则这是一个奇怪的问题。你到底想做什么?仔细考虑ORM是否需要跨多个进程/机器运行…在这种情况下,缓存层变得更加困难。我直接指的是ORM级别之外的缓存,比如memcache(我做web开发),但是任何键值存储都应该可以工作。本质上,自动执行ORM缓存需要大量重复数据库应该做的事情,同时添加架构和bug。在大多数情况下,通过显式的应用程序级缓存和更好的数据库索引等,可以更好地获得性能。