首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用berkeley db实现缓存

使用berkeley db实现缓存
EN

Stack Overflow用户
提问于 2013-06-17 17:27:37
回答 1查看 418关注 0票数 1

我正在编写一个tcp代理,它在berkeley db数据库中缓存tcp块(见下图)。

当一个流通过源代理时,在继续到达目标代理之前,它会被分成块。

数据块存储在Berkeley Db数据库中。

下一次流通过代理时,如果数据库中已有块,则代理仅将其引用发送到将重放流的该部分的目标代理。

数据库中的每条记录都具有以下格式: Key(Adler32+MD5)数据

没有时间戳。

我主要担心的是数据库在不断增长。我需要偶尔清除旧记录。

我不清楚该怎么做。

我想在每个记录中引入一个时间戳,并在每次访问记录时更新它,然后运行一个单独的进程,该进程将遍历数据库以删除“旧”记录。

我认为这不是一种优雅的方式。

有人有其他/更好的主意吗?

谢谢

源--| tcp代理|-| tcp代理|-目标

EN

回答 1

Stack Overflow用户

发布于 2013-06-17 17:40:17

解决方案是对每个数据同时使用键和散列。散列用于检索数据库中的位置,以及用于标识该位置上的数据的键。因此,您可以通过控制哈希函数来控制缓存使用的位置数。然后使用该密钥来检测“冲突”。有很多关于散列函数的文章。最简单的是简单的线性模函数,如h= a*data+b模p,其中a和b是相对质数。这可以确保不会产生太多的冲突。我不确定(我记不起来了,因为我已经很多年没有使用过BDB了),但我认为BDB可以根据需要提供散列。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17144309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档