hbase数据存储与查找原理[亲测有效]

hbase数据存储与查找原理[亲测有效]基本概念 RegionServer HBase的RegionServer就是用来处理客户端读取和写入数据的,和kafka的broker,Elasticsearch的Node的功能相同。 Region…

hbase数据存储与查找原理

Region

Region和kafka的partition(分区),Elasticsearch的shard(分片)差不多,是个物理概念。

一个表可以有多个Region,一个Region只属于一张表。

组件 逻辑存储 物理存储
Kafka topic partition
Elasticsearch index shard
HBase table region

store

store在HBase中对应的是列簇(Column Family,CF)

列簇在内存中的store是memstore,在磁盘中的是storefile,当内存中的memstore数据达到一定的阈值之后, 就会通过flashcache在磁盘上创建一个新的storefile,并且将memstore中的数据写入这个新创建的storefile。

当storefile文件的数量增长到一定阈值后会进行合并,在合并过程中会进行版本删除工作,从而形成更大的storefile。

当一个region所有storefile的大小和超过一定阈值后,会把当前的region分割为两个,并由master分配到相应的RegionServer服务器,实现负载均衡。

Region是HBase中分布式存储和负载均衡的最小单元,不同的Region可以分布在不同的Regionserver上。

RowKey

HBase定位一行数据的唯一标识,RowKey是按照字典顺序排序的,Rowkey最多只能存储64k的字节数据。

在设计RowKey的时候就应该注意,要让相同数据集的RowKey前缀尽量相同,这样才能分布到一起。

RowKey是写数据的时候才确定的,那个范围的RowKey放那个Region也是创建Region的时候确定

列族(Column Family,CF)

HBase每一行可以有多个列簇,在创建表的时候就必须指定列簇。

create "table_name", "cf1","cf2"

代码100分

每一个列簇可以存放多个列(column),列是不用在创建表的时候指定的。

单元格(Cell)

由rowkey:cf:column确定,单元格是有版本的,其中的内容是未解析的字节数组(Byte[]),cell中的数据是没有类型的,全部是字节码形式存贮。

rowkey+cf+column+version才能唯一定位cell

更加底层的结构是HFile,KeyValue,有兴趣可以研究一下它们的结构

时间戳(Timestamp)

HBase每个cell存储单元对同一份数据有多个版本,根据唯一的时间 戳来区分每个版本之间的差异,不同版本的数据按照时间倒序排序,最新的数据版本排在最前面。

时间戳的类型是64位整型,HBase会把当前系统时间毫秒做为默认值,也可以由客户显式赋值,如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。

读数据

HBase读数据

写数据

HBase写数据

WAL(Write Ahead Log),为了崩溃恢复数据

scan

RegionScanner:扫描Region StoreScanner:扫描Store StoreFileScanner:扫描StoreFile与HFile KeyValueScanner:扫描MemStore

HBase扫描是比较慢的,特别是全表扫描,所以尽量避免,特别是在使用phoenix的时候,不要把HBase当做MySQL来用。

phoenix虽然是SQL,但是底层还是通过HBase的扫描过滤来实现的,非RowKey还是扫描的全部Region。

参考

hbase scan KeyValue

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/9543.html

(0)
上一篇 2023-02-06
下一篇 2023-02-06

相关推荐

  • Python List转Array的小技巧

    Python List转Array的小技巧Python是一种强大的编程语言,广泛应用于各种领域。Python List是Python语言中的一种基本数据类型,可以用于存储一系列的数据。然而,在某些情况下,我们需要将Python List转换为Array类型,以便更好地执行我们的程序。在本文中,我们将介绍Python List转Array的小技巧,让读者可以更好地理解这个过程,并使他们的代码更为高效。

    2024-05-04
    13
  • Python变量: 变量命名规则及常见应用场景

    Python变量: 变量命名规则及常见应用场景Python是一种高级编程语言,拥有简单易懂的语法和强大的功能。Python中变量是一个重要的概念,本文将从变量命名规则、变量类型、变量作用域和变量常见应用场景等方面对Python中的变量进行详细阐述。

    2024-04-10
    18
  • Oracle.ManagedDataAccess 提示ORA-01017 错误【解决方案】[亲测有效]

    Oracle.ManagedDataAccess 提示ORA-01017 错误【解决方案】[亲测有效]
    Oracle.ManagedDataAccess 提示ORA-01017 错误【解决方案】 Oracle.ManagedDataAccess 提示ORA-0…

    2023-04-08
    104
  • 优化Python代码执行效率的实用技巧

    优化Python代码执行效率的实用技巧在众多编程语言中,Python被广泛应用。它的简单易用,高效,且具有极强的可读性和可维护性,使它适用于不同大小和类型的项目和领域应用。然而,Python在处理大规模、高性能和高负载的任务时,可能需要优化代码以提高效率和性能。在本文中,将介绍一些实用的技巧,可用于优化Python代码的执行效率。

    2023-12-24
    58
  • 提高 Python 代码效率的实用技巧

    提高 Python 代码效率的实用技巧Python 是一种相对较慢的编程语言,但它非常流行并且有很多便于使用的库和工具。如果你正在使用 Python 编写大量的代码,那么如何提高代码的效率呢?在本文中,我们将从多个方面探讨 Python 代码的效率,并介绍一些实用技巧,以帮助大家更快地编写高效的 Python 代码。

    2023-12-06
    69
  • Python Debug Assertion Failure及如何解决

    Python Debug Assertion Failure及如何解决Python Debug Assertion Failure是指Python程序在运行过程中出现了某些问题,导致Python进程被迫退出,并在控制台输出了一些错误信息。这种错误一般都会带有一个Debug Assertion Failure的标志,提示开发者在代码中出现了一些断言错误。断言是一种常用的编程技巧,用来在代码运行过程中判断某些条件是否满足,从而确保代码的正确性。由于断言通常只在开发阶段用于调试,所以在生产环境中被禁用,也就不会出现Debug Assertion Failure错误。

    2024-02-29
    56
  • 成都哪里可以开运输费发票-中国-新闻网「建议收藏」

    成都哪里可以开运输费发票-中国-新闻网「建议收藏」成都哪里可以开运输费发票【152 * 9б 28 * 21 б9】陈生,诚、信、合、作,保、真、售、后、保、障、长、期、有、效。adb的全称为Android Debug Bridge,是Androi…

    2023-02-01
    103
  • mysql读写慢_docker清除缓存

    mysql读写慢_docker清除缓存Buffer pool 我们都知道我们读取页面是需要将其从磁盘中读到内存中,然后等待CPU对数据进行处理。我们直到从磁盘中读取数据到内存的过程是十分慢的,所以我们读取的页面需要将其缓存起来,所以MyS

    2023-05-19
    95

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注