HBase表结构

HBase是非关系型数据库,是高可靠性、高性能、面向列、可伸缩、实时读写的分布式数据库。

HBase使用场景

  • 大规模数据存储:如日志记录、数据库备份等。
  • 实时数据访问:如实时搜索、实时分析等。
  • 高性能读写:如高并发、低延迟的读写操作。

一般我们从数仓中离线统计分析海量数据,将得到的结果插入HBase中用于实时查询。

表结构

hbase在表中组织数据。表名是字符串和字符的组合,可以在文件系统路径中使用

这里以一个公司员工表为案例来讲解,此表中包含员工基本信息(员工姓名、年龄),员工详细信息(工资、角色),以及时间戳。整体表结构如下:

每一行有一个RowKey用于唯一地标识和定位行,各行数据按RowKey的字典序排列。其中ImployeeBasicInfoCLF和DetailInfoCLF是两个列族,列族下又有多个具体列。(员工基本信息列族:姓名、年龄。详细信息列族:薪水、角色)

行键RowKey:

在表中数据依赖于行来存储,行通过行键来区分。行键没有数据类型,通常是一个字节数组 

  • 行键,类似mysql中的主键,Table中的记录按照Row Key排序,行键是表结构的一部分;
  • 由于Hbase只支持3中查询方式:
  1. 基于Rowkey的单行查询
  2. 基于Rowkey的范围扫描
  3. 全表扫描
  • 因此,Rowkey对Hbase的性能影响非常大,Rowkey的设计就显得尤为的重要。
  • rowkey 行键可以是任意字符串(最大长度是 64KB,实际应用中长度一般为 10-100bytes),最好是 16。
  • 在 HBase 内部,rowkey 保存为字节数组。
  • rowkey是行的唯一标识,相同行键的数据属于同一行
  • HBase 会对表中的数据按照 rowkey 升序排序 (字典顺序)

列族/列簇ColumnFamily

列族是一些列的集合,一个列族所有成员都有同样的前缀

行中的数据通过列族来组织。列族也暗示了数据的物理排列。所以列族必须预先定义,并且不容易被修改。每行都拥有相同的列族,可能有些行的数据为空。列族是字符串和字符的组合,可以在文件系统路径中使用

列族必须在表建立的时候声明,列则不需要特别声明,用户随时可以创建新列。

  • Hbase通过列族划分数据的存储,列族下面可以包含任意多的列,实现灵活的数据存取。就像是家族的概念,我们知道一个家族是由于很多个的家庭组成的。列族也类似,列族是由一个一个的列组成(任意多)。
  • Hbase表的创建的时候就必须指定列族。就像关系型数据库创建的时候必须指定具体的列是一样的。
  • Hbase的列族不是越多越好,列族越多,在取一行数据需要参与IO、搜寻的文件就越多;官方推荐的是列族最好小于或者等于3。我们使用的场景一般是1个列族。
  • 一个列族会储存一个物理文件;
  • 通常将具有相同IO(读写)属性的列放在同一个列族下,IO属性即经常在一起查询的字段,由具体的实际业务中决定;

列Column

  • 列为每一行的列名和对应的值;可以理解为mysql的列;
  • 一个列族包含一个或多个列;列族是表结构的一部分,而列不是;
  • 定位一个列,必须指定列族;
  • 列名都以列族作为前缀,如:courses:history,courses:math;都属于courses这个列族;

单元格cell

  • HBase 中通过 rowkey 和 columns 确定的为一个存储单元称为 cell;
  • 每个 cell 都保存着同一份数据的多个版本。版本通过时间戳来索引。
  • 由{rowkey, column( = + ), version} 唯一确定的单元。 Cell 中的数据是没有类型的,全部是字节码形式存贮。

HBase表特点

  • 数据规模大,单表可容纳数十亿行,上百万列。
  • 无模式,不像关系型数据库有严格的Scheme,每行可以有任意多的列,列可以动态增加,不同行可以有不同的列,列的类型没有限制。
  • 稀疏,值为空的列不占存储空间,表可以非常稀疏,但实际存储时,能进行压缩。
  • 面向列族,面向列族的存储和权限控制,支持列族独立查询。
  • 数据多版本,利用时间戳来标识版本
  • 数据无类型,所有数据以字节数据形式存储

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/442365.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用Docker部署JSON Crack

文章目录 1. 在Linux上使用Docker安装JSONCrack2. 安装Cpolar内网穿透工具3. 配置JSON Crack界面公网地址4. 远程访问 JSONCrack 界面5. 固定 JSONCrack公网地址 JSON Crack 是一款免费的开源数据可视化应用程序,能够将 JSON、YAML、XML、CSV 等数据格式可视化为交互…

电加热热水器上架亚马逊美国站需要的UL174报告

电加热热水器上架亚马逊美国站需要的UL174报告 家用热水器出口美国需要办理UL174测试报告。 热水器就是指通过各种物理原理,在一定时间内使冷水温度升高变成热水的一种装置。分为制造冷气部分和制造热水部分。其实这两个部分又是紧密地联系在一起,密不可…

使用CUDA过程中出现异常

使用:yolo detect train dataSKU-110K.yaml modelyolov8n.pt epochs100 imgsz640 device0,1 出现错误 UserWarning: CUDA initialization: CUDA unknown error - this may be due to an incorrectly set up e nvironment, e.g. changing env variable CUDA_VISIB…

Sentinel之力:解锁@SentinelResource注解的神奇威力

欢迎来到我的博客,代码的世界里,每一行都是一个故事 Sentinel之力:解锁SentinelResource注解的神奇威力 前言SentinelResource注解基础:数字法术的咒语SentinelResource 注解的基本概念和作用:在方法上添加 SentinelRe…

burp靶场--xss下篇【16-30】

burp靶场–xss下篇【16-30】 https://portswigger.net/web-security/all-labs#cross-site-scripting 实验16:允许使用一些 SVG 标记的反射型 XSS ### 实验要求: 该实验室有一个简单的反射型 XSS漏洞。该网站阻止了常见标签,但错过了一些 S…

力扣hot100 括号生成 递归回溯 超简洁版

Problem: 22. 括号生成 Code 使用 static 会被复用 class Solution {List<String> ans new ArrayList<>();public List<String> generateParenthesis(int n){dfs(n, n, "");return ans;}/*** param l 左括号待补个数* param r 右括号待补个数*…

Spring Boot(番外):防止反编译之代码混淆

1 概述 就是针对编译生成的 jar/war 包 里面的 .class 文件 逆向还原回来,可以看到你的代码写的啥。 比较常用的反编译工具 JD-GUI ,直接把编译好的jar丢进去,大部分都能反编译看到源码: 如果不想让别让看到我们的代码,常用手段有代码混淆和jar包加密。下面我们讲一下代码…

突破瓶颈,提升开发效率:Spring框架进阶与最佳实践-IOC

IOC相关内容 1.1 bean基础配置1.1.1 bean基础配置(id与class)1.1.2 bean的name属性步骤1&#xff1a;配置别名步骤2:根据名称容器中获取bean对象步骤3:运行程序 1.1.3 bean作用范围scope配置1.1.3.1 验证IOC容器中对象是否为单例验证思路具体实现 1.1.3.2 配置bean为非单例1.1.…

服务器部署geoserver

linux 进入服务器&#xff0c;创建geoserver文件夹并且解压压缩包 cd /opt mkdir geoserver unzip geoserver-2.19.x-2023-09-22-bin.zip编辑start.ini文件&#xff0c;将port更改为自己的端口 进入bin目录&#xff0c;执行命令包 cd /opt/geoserver/bin ./startup.sh 浏览器…

初识attention

近年来&#xff0c;attention机制在机器视觉和机器翻译领域受到了广泛的关注&#xff0c;有很多文章都是融合attention来提高性能。attention受启发于人类的视觉系统&#xff0c;最先应用于序列化的机器翻译(NLP)后又推广到计算机视觉中&#xff0c;本篇文章就来简单学习一下at…

VRRP负载平衡

1.构图 2.实验 2.1如图提示配置pc1-pc4 掩码:255.255.255.0网关均设置为192.168.1(\2).254 2.2配置sw1-sw2 [sw1]port-group 1 //创建接口组&#xff0c;组号是1[sw1-port-group 1]group-member gigabitethernet 0/0/1 to gigabitethernet 0/0/3 //添加组成员&#xff0c;从…

HTTPS实现原理

1 为什么需要HTTPS&#xff1f; HTTP 在进行数据传输时采用明文传输&#xff0c;数据包中的用户信息等隐私数据可以被第三方通过抓包等方式窃取&#xff0c;是不安全的。 如果客户端使用 MD5 加密算法对数据进行加密&#xff0c;由于加密后的结果是不可逆的&#xff0c;服务器…