首页
学习
活动
专区
圈层
工具
发布

HBase 的列簇设计

HBase 的列簇设计是其数据模型中的一个关键概念。在 HBase 中,表由行和列组成,而列被组织成列簇(Column Family)。每个列簇可以包含多个列。...以下是关于 HBase 列簇设计的一些重要点:存储优化:列簇是 HBase 存储的基本单位。每个列簇的数据会被存储在不同的 HFile 文件中,这有助于提高读写性能。...Region 是 HBase 表的逻辑分区,每个 Region 由一个 RegionServer 管理。预分配 Region 可以减少热点问题,提高写入性能。...TTL(Time To Live):列簇可以设置 TTL,表示数据在 HBase 中的生存时间。超过 TTL 的数据将被自动删除。这有助于管理数据的生命周期,减少存储开销。...版本控制:列簇可以配置最大版本数,表示 HBase 为每个单元格保留的历史版本数。这有助于数据的审计和恢复。最佳实践:尽量减少列簇的数量,通常建议每个表不超过 2-3 个列簇。

62600

轻松理解Hbase面向列的存储

官方介绍 Apache Hbase是Hadoop数据库,一个分布式、可扩展、大数据存储。 当你需要随机地实时读写大数据时使用Hbase。它的目标是管理超级大表-数十亿行X数百万列。...Hbase世界 Hbase虽然弱化了结构,但并不等于放任不管。传统关系型数据库在插入数据前表结构(即所有列和列的数据类型)已经是严格确定的。...Hbase的表在放入数据前也有需要确定下来的东西,那就是Column Family(常译为列族/列簇)。单词Family就是家庭的意思,所以列族就是列的家庭。...下图中所有1001的数据合起来相当于Hbase中的一行,1002的相当于另一行: ? row.png 在Hbase中,只要确定了列族(具体的列不用管),表(Table)就确定了。...table.png 官方文档中提醒:把传统数据库中的表/行/列的概念用在Hbase中不是一个有帮助的类比。相反可以把Hbase的表想象成一个多(两)维Map(Map套Map)。

3.7K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    从HBase底层原理解析HBASE列族不能设计太多的原因?

    但是region不是HBase物理存储的最小单元,它由一个或者多个store组成,每个store保存一个column family即列族。...每个列族在文件层面上是以单独的文件存储的。但是不同的列族,却可能会共享一个region。这就会导致一个问题: HBase 表中列族A的数据有100万行,但是列族B可能才1000行。...如果一个HBase表中设置过多的列族,则可能引起以下问题: 一个region中存有多个store,当region分裂时导致多个列族数据存在于多个region中,查询某一列族数据会涉及多个region导致查询效率低...(这一点在多个列族存储的数据不均匀时尤为明显) 多个列族则对应有多个store,那么Memstore也会很多,因为Memstore存于内存,会导致内存的消耗过大 HBase中的压缩和缓存flush是基于...当一个列族出现压缩或缓存刷新时,因为关联效应会引起临近的其他列族做同样的操作,在列族过多时会涉及大量的IO开销 所以,我们在设计HBase表的列族时,遵循以下几个主要原则,以减少文件的IO、寻址时间:

    2.2K11

    分布式NoSQL列存储数据库Hbase_MR集成Hbase:读写Hbase规则(九)

    分布式NoSQL列存储数据库Hbase(九) 知识点01:课程回顾 知识点02:课程目标 MapReduce读写Hbase 重点:记住读写的规则 Spark中读写Hbase规则与MapReduce...是列族的一个属性,用于数据查询时对数据的过滤,类似于ORC文件中的布隆索引 实现 列族属性:BLOOMFILTER => NONE | ‘ROW’ | ROWCOL NONE :不开启布隆过滤器...自动判断是否包含需要的rowkey,如果包含就读取这个文件,如果不包含就不读这个文件 ROWCOL:行列级布隆过滤 生成StoreFile文件时,会将这个文件中有哪些Rowkey的以及对应的列族和列的信息数据记录在文件的头部...当读取StoreFile文件时,会从文件头部或者这个StoreFile中的所有rowkey以及列的信息,自动判断是否包含需要的rowkey以及列,如果包含就读取这个文件,如果不包含就不读这个文件 总结...Hbase通过布隆过滤器,在写入数据时,建立布隆索引,读取数据时,根据布隆索引加快数据的检索 知识点15:Hbase优化:列族属性 知识点16:Hbase优化:其他优化 附录一:Maven依赖

    2.1K10

    分布式NoSQL列存储数据库Hbase_列族的设计(五)

    分布式NoSQL列存储数据库Hbase_列族的设计(五) 知识点01:课程回顾 Hbase存储原理 存储架构 Hbase:对外提供分布式内存 Master:集群管理 RegionServer...目录:/hbase Hbase数据:/hbase/data NS目录 Table的目录 Region的目录 列族的目录...Rowkey会构建索引:内存的占用越大,比较就越慢 知识点02:课程目标 知识点03:Hbase设计:列族的设计 知识点04:聊天系统案例:需求分析 知识点05:聊天系统案例:Hbase表设计...(img-XPxKWFGg-1616666919964)(20210322_分布式NoSQL列存储数据库Hbase(五).assets/image-20210322105117623.png)]...随机取某一列的一个值 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9a9g0u0B-1616666919964)(20210322_分布式NoSQL列存储数据库Hbase

    2K20

    分布式NoSQL列存储数据库Hbase(六)

    文章目录 分布式NoSQL列存储数据库Hbase(六) 知识点01:回顾 知识点02:目标 知识点03:SQL on Hbase 知识点04:Hive on Hbase 介绍 知识点05:Hive on...列族设计 长度原则:名称没有别的意义,满足标识以后,越短越好 个数原则:列族的个数不超过3个 1个:如果列的个数比较少 2个或者3个:如果列的个数达到30个及以上 2....数据构建结构化的数据形式 可以用SQL来实现处理 实现 将Hbase表中每一行对应的所有列构建一张完整的结构化表 如果这一行没有这一列,就补null Hive:通过MapReduce来实现 Phoenix...:通过Hbase API封装实现的 总结 原因:满足各种应用场景下,对于Hbase使用的方式,基于SQL方式会更加通用 实现:将整张表的数据构建结构化形式,每一行没有列就补null 原理:将SQL转换成了...中创建Hbase的关联表,关联成功后,使用SQL处理关联表 如果Hbase中表不存在,默认使用Hive的第一列作为rowkey 如果Hbase中表已存在,只能建外部表,使用:key来表示rowkey HIve

    4K20

    EasyExcel实现动态列解析和存表

    总结:公共字段(翻译表头:@ExcelProperty 可以指定多个表头( @ExcelProperty(value = {"发货数量", "采购数量(台)"}) ))动态字段(需要有每个系统内动态字段的字段名称和表头的对应关系...ExcelProperty(value = {}) 中添加新的表头效果字典配置:图片数据表结果:图片公共字段使用常规的数据库表字段存储,动态字段使用额外列存 JSON 串。...*/ private String dynamicFields; private Date createTime; private String createBy;}因为存在不确定的列,...目前有一个缺点就是这样存的动态字段不好做条件查询,影响不是很大。...总结本文介绍了使用 EasyExcel 组件来进行导入,实现公共列和动态列组合类型的导入,以及如何存储的功能,主要利用反射和字典分别来维护公共列和动态列的表头和字段的对应关系,利用此关系对数据进行解析。

    6.4K31

    根据数据源字段动态设置报表中的列数量以及列宽度

    在报表系统中,我们通常会有这样的需求,就是由用户来决定报表中需要显示的数据,比如数据源中共有八列数据,用户可以自己选择在报表中显示哪些列,并且能够自动调整列的宽度,已铺满整个页面。...第一步:设计包含所有列的报表模板,将数据源中的所有列先放置到报表设计界面,并设置你需要的列宽,最终界面如下: ?...第二步:在报表的后台代码中添加一个Columns的属性,用于接收用户选择的列,同时,在报表的ReportStart事件中添加以下代码: /// /// 用户选择的列名称...,应该为前一列坐标加上宽度 headers[c].Location = new PointF(tmp.Location.X + tmp.Width, headers[c]...源码下载: 动态设置报表中的列数量以及列宽度

    10.7K100

    分布式NoSQL列存储数据库Hbase Java API(四)

    文章目录 分布式NoSQL列存储数据库Hbase(四) 知识点01:课程回顾 知识点02:课程目标 知识点03:存储设计:存储架构 知识点04:存储设计:Table、Region、RegionServer...表设计:Rowkey设计 分布式NoSQL列存储数据库Hbase(四) 知识点01:课程回顾 知识点02:课程目标 Hbase存储设计 整个Hbase中的存储结构?...,建议将图片保存下来直接上传(img-yYfd67AX-1616633798599)(20210319_分布式NoSQL列存储数据库Hbase(四).assets/image-20210317190105892...)(20210319_分布式NoSQL列存储数据库Hbase(四).assets/image-20210319091417912.png)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传...(img-WvMurhSI-1616633798606)(20210319_分布式NoSQL列存储数据库Hbase(四).assets/image-20210319091609104.png)] 知识点

    2K20

    使用 easypoi 导出 excel 实现动态列,完美解决!

    说明 使用的是easypoi进行导出 行头是动态生成 依据key进行列匹配,进行数据填充 第一列进行纵向动态合并 自己的一个使用,记录一下 工具依赖     ...artifactId>easypoi-web    3.2.0 实现效果 变更前样式 变更后样式 代码解析 动态生成列头...new ExcelExportEntity("统计字段2", "statisKey2", 30);     entityList.add(statisDateXh);     //参数信息--[用于动态拼接列头...[mergeMap key列索引(从0开始),value依赖的列,没有传空,startRow 开始行(从零开始)]     //Map mer = new HashMap...new ExcelExportEntity("统计字段2", "statisKey2", 30);     entityList.add(statisDateXh);     //参数信息--[用于动态拼接列头

    5.8K40

    分布式NoSQL列存储数据库Hbase(一)Hbase的功能与应用场景、基本设计思想

    主键的概念 MySQL主键:可以没有,唯一标记一行、作为主键索引 Hbase行健:自带行健这一列【行健这一列的值由用户自己设计】,唯一标识一行,作为Hbase表中的唯一索引 Hbase...整个数据存储都是按照Rowkey实现数据存储的 2、列族设计 ColumnFamily:列族,对除了Rowkey以外的列进行分组,将列划分不同的组中 注意:任何一张Hbase的表,都至少要有一个列族...如果没有列族:找一个人,告诉你这个人就在这栋楼 如果有了列族:找一个人,告诉你这个人在这栋楼某个房间 3、数据列设计 4、版本设计 功能:某一行的任何一列存储时,只能存储一个值,Hbase...普通列与对应的值 列【timestamp】与对应的值【支持多版本】 知识点08:HBASE中的按列存储 1、功能 Hbase的最小操作单元是列,不是行,可以实现对每一行的每一列进行读写 2、问题 Hbase...……100列,每一列10M】:select id from table ; 先找到所有符合条件的行,将整行的数据所有列全部读取:1000M数据 再过滤id这一列:10M Hbase中读取数据

    2.2K30

    rowkey散列和预分区设计解决hbase热点问题(数据倾斜)

    Hbase的表会被划分为1....n个Region,被托管在RegionServer中。...存在的缺点比较明显:首先是热点写,我们总是向最大的start key所在的region写数据,因为我们的rowkey总是会比之前的大,并且hbase的是按升序方式排序的。...随机散列与预分区二者结合起来,是比较完美的。...预分区一开始就预建好了一部分region,这些region都维护着自己的start-end keys,在配合上随机散列,写数据能均衡的命中这些预建的region,就能解决上面的那些缺点,大大提供性能。...以上我们只是显示了部分region的信息,可以看到region的start-end key还是比较随机散列的。同样可以查看hdfs的目录结构,的确和预期的38个预分区一致:  ?

    2.3K30

    使用EasyPOI实现列数动态生成,多个sheet生成

    一、背景 公司有个报表需求是根据指定日期范围导出指定数据,并且要根据不同逻辑生成两个Sheet,这个日期影响的是列数而不是行数,即行的数量和列的数量都是动态变化的,根据用户的选择动态生成的,这个问题花了不少时间才解决的...二、效果图 动态生成30个列,两张Sheet 动态生成1个列,两张Sheet 三 、准备 我们公司使用的版本是3.2.0,我们项目没有引入所有模块,只用到了base和annotation...这边就是动态生成的,跟用用户选择的日期范围,动态生成列的数量 excelentity = new ExcelExportEntity(null, "recordDate");...//设置一个集合,存放动态生成的列 List modelListChild = new ArrayList()...modelListChild.set(i, x2); } } } //将定义好的字列放到父列中

    3.5K20

    《历史代码分析》5、动态控制列表的列

    今天我们讲一下,动态展示列表的列,因为找不到代码了,所有本篇用图展示。...举个栗子 我们希望能够动态的控制列表的列,例如,英语老师只想知道自己学科的学生成绩,那可以把其它的成绩的列隐藏掉,如下: 上面的功能,我们应该如何实现,其实最简单的方式,就是记录每个老师她们要显示的列,...保存到数据库中,如下 后端可以在每个老师登录时,获得到她们要显示的列,前端需要控制哪个列名显示,但是这种方法,需要前端判断,前端百分百不愿意做判断, 所以呢,当前是我们后端把所有数据都过滤好,组成合适的数据返回给前端...,我们也可以把所有的列都保存到字段中,如果该列显示用1表示,不显示用0表示,保存到字段的内容用JSON格式,如下: { "id": 1, "name": 1, "age": 1, "chinese...": 0, "english": 1 ... } 如果需要记录列的顺序,则需要用新的一张表,来记录每个老师设置的顺序,不吹了,基本上功能都是这样子,其实不管怎么样,前端都需要做判断,下次聊。

    57200
    领券