如果我必须创建一个 Web 服务来提供对字典的访问,我想最好不要在每个请求上触发 SQL 查询,而是将先前的结果保存在内存中并仅在没有条目时访问数据库要求到现在。
但这样一来,我的字典就会增加,并以内存中的完整 SQL 表结束。
我正在根据每个条目的使用频率寻找一种字典的清洁模式。但是“最后访问时间”不是一个好方法,也不是命中数,因为它会随着时间的推移而增长,并且不能反映我的字典条目的平均当前使用情况。
有没有办法知道要丢弃哪些条目以尽可能多地避免数据库访问?
如果我必须创建一个 Web 服务来提供对字典的访问,我想最好不要在每个请求上触发 SQL 查询,而是将先前的结果保存在内存中并仅在没有条目时访问数据库要求到现在。
但这样一来,我的字典就会增加,并以内存中的完整 SQL 表结束。
我正在根据每个条目的使用频率寻找一种字典的清洁模式。但是“最后访问时间”不是一个好方法,也不是命中数,因为它会随着时间的推移而增长,并且不能反映我的字典条目的平均当前使用情况。
有没有办法知道要丢弃哪些条目以尽可能多地避免数据库访问?
最常见的是“LRU”,它代表“最近最少使用”。这是您所指的“最后访问时间”,在实践中效果很好。
维基百科有很多不同策略的例子,也许你可以找到一个适合你的: http ://en.wikipedia.org/wiki/Cache_algorithms#Examples
“我的字典将增加并以内存中的完整 SQL 表结束” - 你如何在内存中定义完整的 SQL 表。您可以定义固定的内存大小吗?如果是,那么您可能会创建一个固定大小的优先级队列。弹出的第一个元素应该是最不常被点击的元素,您可以通过使用 Comparable/Comparator Interface 来做到这一点。当队列已满并且您必须插入传入元素时,只需触发 queue.pop() 然后插入传入元素。这样你就可以继续清洁最不常用的那些。