如果您的数据库已经使用了BloomFilter,还值得使用吗?

cx6n0qe3  于 2021-06-09  发布在  Redis
关注(0)|答案(2)|浏览(482)

我在几个地方读到过一些数据库在查询数据库时使用bloom过滤器来查找匹配项。在我的示例中,我使用的是postgresql,它是这些数据库之一。
当谈到用redis实现bloomfilter时,我的问题出现了,redis有一个模块,允许您在集合中输入成员时使用bloomfilter(但请记住查找过程的复杂性,而不是从磁盘检索该值)
现在,使用redis的好处是将值存储在内存中,当尝试检索该值时,比在rdbms中查找该值性能更好,因为该值存储在磁盘上。
在我的示例中,假设我正在检查用户名是否已经存在,那么使用带有bloom过滤器的redis内存解决方案与只使用postgresql查询进行检查相比,还值得吗?
我的流程是这样的:
CheckIfUserExsits() // using Redis bloom filter If TRUE then confirm with rdbms // do to x% probability of false positive nature of bloom filter If rdbms == MATCH then reply with "User does exist" Else don't check rdbms at all // do to 0% probability of false negative nature of bloom filter 这个流应该更为有效,因为您不需要查询rdbms,也不需要通过内存查找返回来快速地进行查询 false 更有效率。
然而,因为我关心的只是一个成员是否存在,所以要提高用 false ,redis步骤真的有用吗?因为如果postgresql已经在使用bloom过滤器查询表,那么性能应该已经相对较快了。

5fjcxozz

5fjcxozz1#

除非确实存在性能问题,否则不要添加redis。它增加了第二个数据存储,开发速度将大大减慢,并会看到更多的错误,因为每次数据更改都需要在这两者之间同步。
当redis仅仅取代了postgres的核心功能时,它也没有多大帮助。postgres也使用内存来缓存数据。只要确保它配置了适当的内存限制。
redis最有用的地方是缓存“派生”数据,即。e。数据库和应用程序花费大量时间处理的任何内容。
bloom过滤器是类似的:当你需要每秒几十万次的查找时,一定要使用它们。但默认使用现有数据库。博士后的表现相当不错——我曾多次对此感到惊讶。
仅在测量和确定问题后进行优化。

ffscu2ro

ffscu2ro2#

我在几个地方读到过一些数据库在查询数据库时使用bloom过滤器来查找匹配项。在我的示例中,我使用的是postgresql,它是这些数据库之一。
你能提供你正在读的东西的链接吗?
postgresql确实有一个bloomfilter索引类型扩展(在“contrib”中),但是索引必须显式创建,而且无论如何它对您的用例都没有用处。它回答了一个问题,对于每一行,“这一行是否满足一组条件”。它不回答“表中的任何行是否满足这一个条件”的问题。
postgresql也有一个c语言bloom数据结构供内部使用,但是您的需求并不是它所用于的。
面对postgresql的acid/mvcc模型及其存储模型,您想要的bloom过滤器很难实现。
如果你真的需要这个(我怀疑你确实需要),那么使用redis似乎是一个很好的工具。但你如何保持它们的同步呢?

相关问题