广告
返回顶部
首页 > 资讯 > 数据库 >hbase中的位图索引--布隆过滤器
  • 586
分享到

hbase中的位图索引--布隆过滤器

2024-04-02 19:04:59 586人浏览 薄情痞子
摘要

   在HBase中,读业务是非常频繁的。很多操作都是客户端根据meta表定位到具体的regionserver然后再查询region中的具体的数据。   但是现在问题

   在HBase中,读业务是非常频繁的。很多操作都是客户端根据meta表定位到具体的regionserver然后再查询region中的具体的数据。

   但是现在问题来了,一个region由一个memstore以及多个filestore组成,memstore类似缓存服务器内存中,可以提高插入的效率,当memstore达到一定大小(由hbase.hregion.memstore.flush.size设置)或者说用户手动flush之后,就会固化存储在hdfs之类的磁盘系统上。也就是说一个region可以对应很多有着有效数据的文件,虽然文件内的数据是按照rowkey进行排序的,但是文件之间的rowkey并没有任何顺序(除非经过一次major_compact合并为一个文件)。

   如果用户现在提出的请求是查看一个rowkey(row1)的随意某个列(cf1:col1)

   即使用 get 'tab','row1','cf1:col1'这样命令

   很有可能的一种现象是,row1在每个文件的starTKEy以及endkey之间,因此regionserver需要扫描每个文件的相关数据块,进行多次物理IO。可是并不能确保每个文件中一定有row1这样的行健,很多物理IO都是无效的,这样以来对性能就有很大的影响。于是乎就有了布隆过滤器,在一定程度上判别文件中是否有指定的行健。

   布隆过滤器分为row以及rowcol两种,原理差不多,以rowcol类型为例:

   在memstore写入到hdfs形成文件时,文件内有一个部分叫做meta,在写入的过程中遵循如下算法

    1.首先会初始化一个比较长的bit数组不妨叫做bit arr[n]={0};

    2.利用k个hash函数(k<n),对单个(row:cf:col)这样的数据进行k次hash运算,保证计算结果在[0,n-1]之间;

    3.假设某个hash函数的运算结果为r,则设置arr[r]=1,这样每个(row:cf:col)差不多都可以有k个结果,并将arr数据相应位置设置为1;

    4.如此反复知道所有的数据都被写入文件,然后将arr写入文件中的meta部分

   由于位图索引本身的结构特点,可以保证arr[n]不会很大;所以即使被缓存到内存中(不是memstore)也不会占用太大空间,虽然在关系型数据库中,尤其是oltp系统,位图索引会造成大量现象,但是在hbase中,已经写入的文件除非compact否则几乎不会修改。

   现在再来看 get 'tab','row1','cf1:col1',在判断某个文件是否含有(row1:cf1:col1)时,只需要将row1:cf1:col1进行k个hash运算,并判断是否每个结果对应的arr数组值是不是1,如果有一个不是,则可以表明文件中不存在这一列数据(当然即使全部都是1也不一定代表就有),这样可以避免读不必要的文件,提高查询效率。

   从上可见布隆过滤器可以在一定程度上避免读不必要的文件,可是由于是基于hash函数的,所以也不能说是完全准确的,而且对于大规模的scan这样的操作,完全没有必要使用布隆过滤器。

                        2017.1.15




您可能感兴趣的文档:

--结束END--

本文标题: hbase中的位图索引--布隆过滤器

本文链接: https://www.lsjlt.com/news/42547.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • hbase中的位图索引--布隆过滤器
       在hbase中,读业务是非常频繁的。很多操作都是客户端根据meta表定位到具体的regionserver然后再查询region中的具体的数据。   但是现在问题...
    99+
    2022-10-18
  • C++哈希应用的位图和布隆过滤器
    目录C++哈希应用的位图和布隆过滤器 一、位图1.位图的概念2.位图的面试题3.位图的实现4.位图的应用二、布隆过滤器1.布隆过滤器的提出2.布隆过滤器的概念3.布隆过滤器的插入4....
    99+
    2022-11-12
  • C#实现从位图到布隆过滤器的方法
    目录前言布隆过滤器简介数据的存储Hash 冲突的解决方案为什么布隆过滤器不支持删除用 C# 实现 Bitmap位运算利用位运算创建 Bitmap用 C# 实现 布隆过滤器Murmur...
    99+
    2022-11-13
  • C++位图,哈希切分与布隆过滤器怎么应用
    本篇内容主要讲解“C++位图,哈希切分与布隆过滤器怎么应用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++位图,哈希切分与布隆过滤器怎么应用”吧!一、位图1、位图的概念所谓位图,就是用每一位...
    99+
    2023-07-05
  • Redis 中布隆过滤器的实现
    Redis 中布隆过滤器的实现?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。什么是『布隆过滤器』布隆过滤器是一个神奇的数据结构,可以用来判断一...
    99+
    2022-10-18
  • Redis中Redisson布隆过滤器的学习
    目录简介使用Demo依赖测试代码简析初始化添加元素检索元素简介 本文基于Spring Boot 2.6.6、redisson 3.16.0简单分析Redisson布隆过滤器的使用。 ...
    99+
    2022-11-13
  • Redis中Bloomfilter布隆过滤器的学习
    目录1.概念2.guava实现2.1.依赖2.2.初始化布隆过滤器2.3.布隆过滤器2.4.添加元素或者判断是否存在3.Redisson实现3.1.依赖3.2.注入或测试1.概念 ​...
    99+
    2022-12-14
    Redis Bloom filter Redis布隆过滤器
  • C++详细讲解模拟实现位图和布隆过滤器的方法
    目录位图引论概念解决引论位图的模拟实现铺垫结构构造函数存储set,reset,testflip,size,countany,none,all重载流运算符测试位图简单应用位图代码汇总布...
    99+
    2022-11-13
  • Redis中Bloom filter布隆过滤器的学习
    目录1.概念2.guava实现2.1.依赖2.2.初始化布隆过滤器2.3.布隆过滤器2.4.添加元素或者判断是否存在3.Redisson实现3.1.依赖3.2.注入或测试1.概念 ​ 布隆过滤器是一个高空间利用率的概率性...
    99+
    2022-12-14
    RedisBloomfilter Redis布隆过滤器
  • Redis中的布隆过滤器怎么实现
    这篇文章主要介绍“Redis中的布隆过滤器怎么实现”,在日常操作中,相信很多人在Redis中的布隆过滤器怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Redis中的布...
    99+
    2022-10-19
  • C++哈希应用之位图,哈希切分与布隆过滤器详解
    目录一、位图1、位图的概念2、大厂面试题3、位图的优缺点二、哈希切分三、布隆过滤器1、布隆过滤器的概念2、布隆过滤器的应用场景3、布隆过滤器的删除4、布隆过滤器的优缺点5、布隆过滤器...
    99+
    2023-05-14
    C++位图 C++哈希切分 C++布隆过滤器 C++哈希
  • 图文解析布隆过滤器大小的算法公式
    目录1. 简介2. 应用场景2.1 缓存穿透2.2 判断某个数据是否在海量数据中存在3. HashMap的问题4. 理解布隆过滤器5. 根据布隆过滤器查询元素6. 可以删除么7. 如...
    99+
    2022-11-13
  • Java中的布隆过滤器你真的懂了吗
    目录什么是布隆过滤器实现的核心思想怎么理解典型应用场景什么是布隆过滤器 布隆过滤器(Bloom Filter)是一种空间效率非常高的随机数据结构,它利用位数组(BitSet)表示一个...
    99+
    2023-05-18
    Java布隆过滤器原理 Java布隆过滤器应用 Java布隆过滤器
  • Redis中的布隆过滤器和PHP的使用方法
    Redis是一个开源的内存数据库,被广泛应用于缓存、消息队列、分布式锁等场景。其中,布隆过滤器是一种高效的数据结构,可以用于判断一个元素是否存在于一个集合中,在Redis中得到了广泛的应用。本文将介绍Redis中布隆过滤器的实现原理、使用方...
    99+
    2023-05-16
    PHP redis 布隆过滤器
  • Java中的布隆过滤器原理实现和应用
    目录介绍实现初始化数据代码实现测试存在的数据不存在的数据介绍 本文全部代码地址 布隆过滤器是一种高效的数据结构,用于判断一个元素是否存在于一个集合中.它的主要优点是速度快,空间占用少...
    99+
    2023-05-17
    Java布隆过滤器使用 Java布隆过滤器实现
  • 浅析python实现布隆过滤器及Redis中的缓存穿透原理
    目录布隆过滤器的原理在 Python 中使用布隆过滤器1、标准布隆过滤器。2、计数布隆过滤器。3、标准扩容布隆过滤器。4、计数扩容布隆过滤器。Redis 中使用布隆过滤器最后的话在开...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作