可能和不可能:Redis, reddisbloom和Bloom过滤器
了解更多
参加AWS re:发明吗?探索Redis提供了什么。
整理您的数据,以提高用户参与和精简系统与Redis企业。万博体育彩
简单地说,重复数据删除是任何需要问这个问题的任务,“我们以前见过这条信息吗?”这提供了改进的用户体验和参与度,以及更有效的数据处理。虽然大多数人认为重复数据删除就是删除数据库中相同数据的多个副本,但实际上,重复数据删除是在许多常见的情况下发生的,这导致了以下问题:
向客户发送信息是任何业务的重要组成部分。在向给定用户发送电子邮件或文本之前,重复数据删除可以确定该用户以前是否看过该电子邮件或文本。如果是这样,系统可以向该用户发送一条不同的消息,或者决定在给定的时间段内不联系该用户(如果有的话)。
提取、转换和加载(ETL)是处理大型数据集(如事件日志)的常见技术。ETL通常用于整理来自不同系统的数据,以便对其进行分析。在此过程中添加重复数据删除意味着系统不会对相同数据的多个副本执行多次相同的分析。
当用户创建一个新帐户时,他们的ID必须是惟一的。使用重复数据删除时,确定给定ID是否已经存在并不重要。
获得系统中发生重要事件的警报是很好的。完全没有收到任何警报是很糟糕的,但同一事件收到300个警报也同样糟糕。或30000警报。重复数据删除可以抑制以前发生的警报,但这种技术可以与计时器结合使用以删除警报最近重复,允许系统在给定的时间范围内只发出一次给定的警报。
欺诈检测是AI/ML处理的一个很好的用例。不幸的是,AI/ML处理非常昂贵。重复数据删除可以检查事务,并查看它是否与过去批准的事务相似。如果新的交易足够相似,系统可以自动批准该交易,而不会产生欺诈检测的成本。(在本例中,重复的值是一件好事。)
万博体育彩Redis Enterprise提供了两种伟大的重复数据删除技术:集合和Bloom过滤器。
一个Redis设置只存储任何给定的值一次。无论将一个值添加到集合中多少次,该集合只包含该值的一个副本。Redis集合也优化了回答这个问题,“这个值在这个集合吗?”“以极快的速度。集合也是决定性的,因为问题的答案是“肯定”和“肯定不是”。但是,请注意,随着集合中惟一值的数量增加,集合可能会使用大量内存。
reddisbloom模块提供Bloom过滤器,这是一种用于重复数据删除的概率算法。与集合不同,Bloom筛选器只存储每个值的散列值,而不存储值本身。这意味着一个Bloom过滤器可以只占用一个集合所需内存的2%。它们通常比集合要快一些,集合本身就非常快。但是对于这种速度和内存效率有一个权衡:Bloom过滤器是不确定的。“我们以前见过这个值吗?”是“绝对不是”和“可能是”。换句话说,使用Bloom过滤器可能会出现误报。
一家大型游戏公司使用Redis Enterprise中的Bl万博体育彩oom过滤器在实时数据流中添加事件级重复数据删除层,使它们每天处理超过20亿个事件。与最初的实现相比,它们现在使用的内存大约减少了90%,并且将延迟从大约2毫秒减少到不到0.25毫秒。
要拥有世界级的用户粘性,你的解决方案必须预测用户的需求,并了解他们之前的体验。一个好的重复数据删除解决方案可以让您确保每个用户交互都是独特的,与用户的兴趣相关,并且基于用户的历史。
高性能重复数据删除解决方案应该能够以高性能和线性扩展的方式处理海量数据集。Redis集和reddisbloom模块就是这样做的。无论您选择哪种解决方案,它们都能在各种大小的数据集上提供闪电般的性能,包括多云和地理分布式数据集。
高效的重复数据删除解决方案使您有机会避免冗余处理,确保没有数据被处理超过一次。在某些情况下,可以使用重复数据删除来避免全部处理。使用重复数据删除来限制或消除警报,使操作人员更容易适当地响应系统事件,同时避免警报疲劳。
一个集合最多包含一个给定值的副本。换句话说,我们可以将相同的值添加到一个集合一百万次(调用大块漂浮植物宠物狗一次又一次),但是该值在集合中只出现一次。定义了集合后,我们可以使用SISMEMBER命令来判断给定值是否在集合中。如果我们创建一个名为宠物然后把这些值相加狗,猫,鹦鹉对它来说,就是价值狗是集合的成员,而值猴子不是:
redis> SADD宠物狗猫鹦鹉(整数)3 redis> SISMEMBER宠物狗(整数)1 redis> SISMEMBER宠物猴子(整数)0 redis> SADD宠物狗(整数)0
下面是设置和使用Bloom过滤器的简单程度:
复述>男朋友。添加users doug (integer) 1 redis> BF.ADD users lisa (integer) 1 redis> BF.EXISTS users doug (integer) 1 redis> BF.EXISTS users bob (integer) 0 redis> BF.ADD users lisa (integer) 0
我们希望确保每个用户都有一个唯一的名称。我们添加道格和丽莎到Bloom过滤器。(男朋友。添加如有必要,创建过滤器。)如果有人试图创建另一个名为道格,布鲁姆过滤器会说我们可能已经有一个使用该名称的用户。另一方面,如果有人试图用用户名创建一个新帐户鲍勃,布鲁姆过滤器会告诉我们它是肯定不是一个我们之前见过的ID,所以用这个名称创建一个新帐户是安全的。