`

Bloom过滤器

 
阅读更多
Bloom filter:是一种节省空间,高效率的数据表示和查询结构.它可以利用位数组很简洁地表示一个集合,并能以很高的概率判断一个元素是否属于这个集合.因此,这种数据结构适合应用在能容忍低错误率的场合.

将一个元素映射到一个m长度的阵列上的一个点,当这个点是1时,那么这个元素在集合内,反之则不在集合内.这个方法的缺点就是当检测的元素很多的时候可能会有冲突,解决方法就是使用k个Hash函数对应k个点,如果所有点都是1的话,那么元素在集合内,如果有0的话,那么元素不在集合内

简单来说,就是将要检测的转化为字符串之后进行多次hash,每一次都检测在数据中的下标是0还是1,如果都是1则表示存在

主要用于解决某些元素是否为集合中元素的判断问题.通过一定的错误率换取空间的节省和查询的高效

SPV节点:Simplify Payment Verification,信任别的节点对区块和交易作校验,一般会在与邻节点的连接中设置过滤器,在比特币中叫做Bloom过滤器

Bloom过滤器:只接收包含钱包里的公钥地址的交易

1.当一个邻节点看到一个交易与SPV节点的过滤器设置的条件符合,它就会用merkleblock消息来给该SPV节点发送一个区块

2.该merkleblock消息包含区块头和一个连接该交易到Merkle树根的一个merkle路径.

3.SPV节点可以利用该merkle路径来把交易和包含交易的区块联系起来,并验证交易包含在区块中

4.SPV节点也用区块头来验证包含交易的区块和区块链中的其他区块能连上

5.这两个验证可以证明交易是记录在区块链上.总之,SPV节点只需要接收小于1KB的区块头和merkle路径数据,这个是全节点接收数据的千分之一(目前全节点接收区块的大小是1M)
分享到:
评论

相关推荐

    Bloom过滤器学习笔记

    ### Bloom过滤器学习笔记 #### 一、Bloom过滤器简介与原理 **Bloom过滤器**是一种空间效率极高的概率型数据结构,用于检验一个元素是否在一个集合中。它最大的特点是快速且节省空间,但是有一定的误判率,并且不能...

    Bloom过滤器的C++实现

    **Bloom过滤器**是一种空间效率极高的概率型数据结构,用于测试一个元素是否在一个集合中。它由布伦南·霍克斯特罗特(Burton Howard Bloom)于1970年提出,主要用于解决大数据集的存储和查找问题。在C++中实现Bloom...

    行业分类-设备装置-基于带有存储结构的Bloom过滤器的关键词可搜索加密方法.zip

    标题中的“行业分类-设备装置-基于带有存储结构的Bloom过滤器的关键词可搜索加密方法”揭示了这个主题属于IT行业中与数据安全和搜索效率优化相关的领域。它涉及到设备装置,这可能指的是硬件系统或者特定的存储设备...

    Bloom过滤器的false positive概率计算1

    在计算Bloom过滤器的false positive概率时,我们需要考虑几个关键参数:位数组的大小(m)、使用的哈希函数数量(k)以及要插入的元素数量(n)。假定每个哈希函数选择位数组中每个bit位的概率相同,我们可以推导出...

    bloom-filter-scala, 用于 Scala的Bloom过滤器,最快的JVM.zip

    bloom-filter-scala, 用于 Scala的Bloom过滤器,最快的JVM Scala的 Bloom filter 概述Bloom过滤器是一种空间高效的数据结构,用于测试某个元素是否是集合的成员。 false 正匹配是可能的,但 false 负数不是。 ...

    Java-BloomFilter, 在Java中,一个独立的Bloom过滤器.zip

    Java-BloomFilter, 在Java中,一个独立的Bloom过滤器 java-bloomfilterJava bloomfilter是一个独立于Java的Bloom过滤器实现。 它旨在在不需要额外库开销的情况下包含在现有项目中。 第一个版本是由 Ian的博客条目...

    Go-ring-提供了一个高性能和线程安全的bloom过滤器Go实现

    在Go语言环境下,为了满足高性能和线程安全的需求,`ring`库提供了一个优秀的Bloom过滤器实现。 首先,让我们深入理解Bloom Filter的工作原理。Bloom Filter由一块位数组和几个不同的哈希函数组成。当一个元素被...

    whatlanguage, 一种使用bloom过滤器实现速度的ruby 语言检测库.zip

    whatlanguage, 一种使用bloom过滤器实现速度的ruby 语言检测库 whatlanguage由 Peter Cooper文本语言检测。快速。快速。内存高效且全部为纯 ruby 。 针对上述速度和内存优势使用Bloom过滤器。 它适用于长度超过 10个...

    Distributed-Systems-Bloom-Filters-Coded-Bloom-Filter-Counting-Bloom-Filter:在此项目中,我实现了Bloom Bloom过滤器,编码Bloom Bloom过滤器,Counting Bloom Filter计数。 这些用于Google Bigtable,Apache HBase,Apache Cassandra和PostgreSQL等系统中

    在此项目中,我实现了Bloom Bloom过滤器,编码Bloom Bloom过滤器,Counting Bloom Filter计数。 这些用于Google Bigtable,Apache HBase,Apache Cassandra和PostgreSQL等系统中。 Google Bigtable,Apache HBase,...

    Cuckoo过滤器:实际上比 Bloom 更好_Go语言_代码_相关文件_下载

    虽然 Bloom 过滤器是众所周知的节省空间的数据结构,可以服务于“如果项目 x 在一个集合中?”之类的查询,但它们不支持删除。它们启用删除的差异(如计算 Bloom 过滤器)通常需要更多空间。 Cuckoo 过滤器提供了...

    bloom过滤器解决缓存击穿问题1

    【布隆过滤器详解及其在缓存击穿中的应用】 布隆过滤器是一种空间效率极高的概率型数据结构,用于判断一个元素是否可能在一个集合中。它通过使用多个哈希函数将元素映射到一个固定大小的位数组上,允许存在一定比例...

    bloom-filter:Java中Bloom过滤器的实现

    Guava的BloomFilter提供了创建、添加元素和查询元素的方法,并且支持动态调整过滤器的大小以控制误判率。以下是一个简单的使用示例: ```java import com.google.common.hash.BloomFilter; import ...

    rust-bloom-filter:Rust中的快速Bloom过滤器实现

    **锈花过滤器:Rust中的高效Bloom过滤器实现** 在计算机科学中,Bloom过滤器是一种空间效率极高的概率型数据结构,用于判断一个元素是否可能在一个集合中。它可能会误判,即报告一个不在集合中的元素为在集合中,但...

    bloomfilter:Bloom过滤器的简单轻量级实现

    Bloom过滤器是一种高效的空间节省的数据结构,常用于判断一个元素是否可能存在于大规模集合中,而无需存储实际的元素。这种技术由Burton Howard Bloom在1970年提出,其设计目标是解决大规模数据集的查找问题,尤其是...

    dumbloom:用PLpgSQL编写的Postgres Bloom过滤器的Bloom过滤器的愚蠢实现

    1. **Bloom过滤器**:Bloom过滤器是一种节省空间的数据结构,通过使用多个哈希函数将元素映射到位数组上,以此来判断元素是否存在。在数据库领域,Bloom过滤器常用于减少不必要的磁盘I/O,例如在索引查询中避免无效...

    bloom:Go包实现Bloom过滤器

    如果该项目实际上在集合中,则Bloom过滤器将永远不会失败(真正的阳性率为1.0); 但很容易出现误报。 艺术是正确选择k和m 。 在此实现中,使用的哈希函数是 ,这是一种非加密哈希函数。 此实现接受用于设置和...

    CuckooFilter:替代Bloom过滤器

    CuckooFilter是一种相对较新的数据结构,设计用于解决在有限空间内存储大量唯一元素的问题,类似于经典的Bloom过滤器。它的出现主要是为了弥补Bloom过滤器的一些不足,尤其是在内存效率和删除操作上的优化。 首先,...

    bloom-filter-scala:Scala的Bloom过滤器,对于JVM最快

    Scala的Bloom过滤器 总览 “ Bloom过滤器是一种节省空间的概率数据结构,用于测试元素是否为集合的成员。可能会出现假阳性匹配,但否定否定匹配。换句话说,查询返回“集合”或“绝对不在集合中。”可以将元素添加到...

    bloom_filter:Crystal的Bloom过滤器

    **Bloom过滤器详解——基于Crystal的实现** Bloom过滤器是一种空间效率极高的概率型数据结构,由Burton Howard Bloom在1970年提出。它被设计用于判断一个元素是否可能存在于一个大规模集合中,但可能会产生误报...

Global site tag (gtag.js) - Google Analytics