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
Algorithm 如何确定要缓存的最佳数据集?_Algorithm_Caching - Fatal编程技术网

Algorithm 如何确定要缓存的最佳数据集?

Algorithm 如何确定要缓存的最佳数据集?,algorithm,caching,Algorithm,Caching,我有一个简单的web服务来服务XML数据集(它们可以大到250MB)。这些数据来自对数据库执行的复杂查询。为了加快服务速度,我想缓存一些查询的结果。但是,我的RAM数量有限(~2GB)。我事先不知道请求最多的XML数据集是什么。此外,这可能会随着时间的推移而改变(例如,昨天最常请求的数据集X,明天可能是数据集Y) 我想要一个“智能”缓存算法,它可以缓存最有可能被请求的数据集。在这种情况下,我不能简单地使用计数器并缓存最常请求的数据段。我需要请求数量的某种时间衰减。您可以使用LRU。每次访问不在缓

我有一个简单的web服务来服务XML数据集(它们可以大到250MB)。这些数据来自对数据库执行的复杂查询。为了加快服务速度,我想缓存一些查询的结果。但是,我的RAM数量有限(~2GB)。我事先不知道请求最多的XML数据集是什么。此外,这可能会随着时间的推移而改变(例如,昨天最常请求的数据集X,明天可能是数据集Y)


我想要一个“智能”缓存算法,它可以缓存最有可能被请求的数据集。在这种情况下,我不能简单地使用计数器并缓存最常请求的数据段。我需要请求数量的某种时间衰减。

您可以使用LRU。每次访问不在缓存中的内容时,请替换“该内容是使用时间最长的缓存”,并将其年龄设置为0,使所有其他年龄递增。每次缓存命中时,重置元素的年龄并增加所有其他值。也可以通过设置等于当前时间戳来完成


注:LRU通常用作需要神谕知识的最佳算法的近似值:替换最长时间内不会使用的算法。当位置良好时,LRU工作良好,不会受到Belady异常的影响。

您可以使用LRU。每次访问不在缓存中的内容时,请替换“该内容是使用时间最长的缓存”,并将其年龄设置为0,使所有其他年龄递增。每次缓存命中时,重置元素的年龄并增加所有其他值。也可以通过设置等于当前时间戳来完成

注:LRU通常用作需要神谕知识的最佳算法的近似值:替换最长时间内不会使用的算法。当位置良好时,LRU工作良好,并且不会受到Belady异常的影响。

一个选项是计算请求之间的时间,或连续几分钟内的请求数。如果您的文档确实很大,您可以选择在文档不在缓存中时保留一些信息,因此您至少可以尝试比VM中通常用于页面替换的方法更广泛的方法,例如LRU,它只跟踪缓存中对象的请求

假设您有web日志,您可以计算出任何数量的不同方法的命中率,只需对日志中记录的一系列请求进行尝试。

一个选项是计算请求之间的时间,或连续几分钟内的请求数。如果您的文档确实很大,您可以选择在文档不在缓存中时保留一些信息,因此您至少可以尝试比VM中通常用于页面替换的方法更广泛的方法,例如LRU,它只跟踪缓存中对象的请求


假设您有web日志,只需在日志中记录的一系列请求上尝试,您就可以计算出任意数量的不同方法的命中率。

为什么不阅读一些关于一般缓存结构的文章

我还建议您阅读一篇关于CPU缓存的文章:

例如,基于CPU缓存的符号,可以使用LRU替换算法将缓存实现为完全关联的缓存。您还可以尝试使用4路集关联缓存的缓存。(不过,在您的案例中,set的定义可能不明确)


一般来说,LRU是一种接近最优的缓存替换算法。LRU可以通过使用时间戳简单地实现,或者有两种近似算法


然而,这实际上取决于工作负载的位置模式(空间和时间)。我们不能简单地说LRU总是好的。因此,您需要更好地了解工作负载的行为。

为什么不阅读一些关于一般缓存结构的文章呢

我还建议您阅读一篇关于CPU缓存的文章:

例如,基于CPU缓存的符号,可以使用LRU替换算法将缓存实现为完全关联的缓存。您还可以尝试使用4路集关联缓存的缓存。(不过,在您的案例中,set的定义可能不明确)


一般来说,LRU是一种接近最优的缓存替换算法。LRU可以通过使用时间戳简单地实现,或者有两种近似算法

然而,这实际上取决于工作负载的位置模式(空间和时间)。我们不能简单地说LRU总是好的。因此,您需要更好地了解工作负载的行为