1

我们的分布式存储项目使用LevelDB作为存储引擎,memcached作为缓存层,我们有一个场景:95%的key查询在存储引擎中是不存在的。

在memcached层,如果找不到key,则查询LevelDB。

在 LevelDB 中,我们使用默认的布隆过滤器来判断 key 是否存在,但仍然有 1% 的误报率。由于 1% 的百分比,我们必须通过 IO 请求该值,这是客户端无法容忍的。(95% 的密钥不存在)

有没有更好的解决方案来知道密钥是否不存在?

更新: 1. 每天都会生成密钥(用户ID+日期),一旦无法获取密钥,客户端会将值放入存储层。2.客户端想要读取延迟(TP99)< x ms(客户端对延迟敏感)

4

1 回答 1

1

我认为有两种方法可以用来改进您的解决方案:
1. 假设所有可能请求的键都在一个有限的集合中。也许您可以将所有键放在集合中,那些不存在的键具有“FALSE”之类的值。
2.提高你的leveldb性能。调整 table-cache 和 block-size 的大小或使用 ssd 作为存储介质。
我们在生产环境中使用 leveldb 作为持久性 kv 存储,并支持类似于您的场景的黑名单等应用程序。

于 2016-04-11T16:04:07.543 回答