HBase是一个分布式的、面向列的数据库,它可以存储海量的结构化和半结构化数据。HBase的表结构是其核心特征之一,它决定了HBase如何组织和访问数据。HBase的表结构分为三个部分,分别是行键、列族和单元格。
行键(Row Key)是HBase表中每一行数据的唯一标识,它可以是任意的字节数组,通常是字符串或数字。行键的设计非常重要,因为它影响了HBase的数据分布和查询性能。HBase按照行键的字典序进行排序,将相邻的行键存储在同一个区域(Region)中,区域是HBase的基本存储单元。因此,行键应该尽量均匀分布,避免热点问题。同时,行键应该尽量简短,以减少存储空间和网络传输开销。此外,行键应该具有业务含义,方便根据行键进行范围扫描或前缀过滤等操作。
列族(Column Family)是HBase表中的逻辑分组,它将一组相关的列放在一起,形成一个二维的数据结构。列族在表创建时就需要定义好,并且不能随意修改。每个列族都有一个名称,例如info、data等。每个列族都有一个单独的存储文件(StoreFile),它是一个基于LSM树的有序文件,可以支持高效的读写操作。每个列族都可以设置一些属性,例如压缩方式、版本数、TTL等。列族的设计应该根据数据的访问模式来确定,通常将经常一起访问的列放在同一个列族中,以提高读取效率。同时,列族的数量应该尽量少,以减少文件数和内存占用。
单元格(Cell)是HBase表中最小的数据单元,它由行键、列限定符(Column Qualifier)和时间戳(Timestamp)组成。列限定符是列族中每一列的名称,它可以是任意的字节数组,通常是字符串或数字。时间戳是单元格中数据的版本号,它可以由用户指定或由系统自动生成。每个单元格都有一个值(Value),它也可以是任意的字节数组,通常是字符串或数字。单元格中可以存储多个版本的数据,版本之间按照时间戳降序排列。用户可以根据时间戳或版本数来获取或删除单元格中的数据。