使用berkeley db实现缓存

时间:2013-06-17 09:27:37

标签: c berkeley-db

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

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

Chunks存储在Berkeley Db数据库中。

下一次流经过代理时,如果数据库中已存在一个块,则代理只会将其引用发送到将重放该部分流的目标代理。

数据库中的每条记录都是以下形式:密钥(Adler32 + MD5)数据

没有时间戳。

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

我不知道该怎么做。

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

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

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

感谢

来源--- | tcp proxy | ---------- | tcp proxy | --- destination

1 个答案:

答案 0 :(得分:0)

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