1

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

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

块存储在 Berkeley Db 数据库中。

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

数据库中每条记录的格式如下: Key(Adler32+MD5) Data

没有时间戳。

我主要担心的是数据库一直在增长。我需要不时清除旧记录。

我不清楚该怎么做。

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

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

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

谢谢

来源---| tcp代理|----------| tcp 代理 |--- 目的地

4

1 回答 1

0

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

于 2013-06-17T09:40:16.833 回答