我目前正在编写一个消息队列,要求我保留服务器已经看过的消息的历史记录。我为每条消息都有唯一的固定大小的ID字段,这使得它变得微不足道。但是,我担心存储每条消息的ID的长期前景,以及之后比较它们的延迟。我当前的ID长度为160位(是的,SHA1)。
我最想知道的是,是否有办法将多个ID压缩到一个字段中以节省内存,如果存在,该算法的假位置和假置为率为消息压缩的功能。理想情况下,我并不真正关心假阴性率,而是关注假阳性的很多,这使得agrep
之类的比较非常好。
答案 0 :(得分:1)
这个问题并没有真正包含足够的信息来提供明确的答案,但您可能需要查看bloom filters。
答案 1 :(得分:1)
我建议使用MD5,它是每封邮件的128摘要。碰撞显然是无关紧要的,因为你总是可以仔细检查任何匹配字节的字节。 128位的优点是它比SHA1稍短(16字节)。
您可以将MD5存储在基数树中。这将使数据紧凑且易于搜索。
答案 2 :(得分:0)
我认为你想要一个持久哈希映射或持久集。大多数哈希映射/集实现通过比较实际对象来处理冲突。
如果所有的键哈希值都可以存储在内存中,这就可以进行摊销的常量时间查找。