我正在编写一个tcp代理,它在berkeley db数据库中缓存tcp块(见下图)。
当一个流通过源代理时,在继续到达目标代理之前,它会被分成块。
数据块存储在Berkeley Db数据库中。
下一次流通过代理时,如果数据库中已有块,则代理仅将其引用发送到将重放流的该部分的目标代理。
数据库中的每条记录都具有以下格式: Key(Adler32+MD5)数据
没有时间戳。
我主要担心的是数据库在不断增长。我需要偶尔清除旧记录。
我不清楚该怎么做。
我想在每个记录中引入一个时间戳,并在每次访问记录时更新它,然后运行一个单独的进程,该进程将遍历数据库以删除“旧”记录。
我认为这不是一种优雅的方式。
有人有其他/更好的主意吗?
谢谢
源--| tcp代理|-| tcp代理|-目标
发布于 2013-06-17 17:40:17
解决方案是对每个数据同时使用键和散列。散列用于检索数据库中的位置,以及用于标识该位置上的数据的键。因此,您可以通过控制哈希函数来控制缓存使用的位置数。然后使用该密钥来检测“冲突”。有很多关于散列函数的文章。最简单的是简单的线性模函数,如h= a*data+b模p,其中a和b是相对质数。这可以确保不会产生太多的冲突。我不确定(我记不起来了,因为我已经很多年没有使用过BDB了),但我认为BDB可以根据需要提供散列。
https://stackoverflow.com/questions/17144309
复制相似问题