MST

星途 面试题库

面试题:从底层原理剖析HBase行式、列式与列簇式存储的选择对系统架构的影响

从HBase底层存储原理出发,分析在设计一个大规模分布式数据存储系统时,选择行式、列式或列簇式存储,会对整个系统架构(包括但不限于数据处理流程、网络架构、节点负载均衡等方面)产生哪些深远影响,以及如何结合业务需求做出最优选择。
33.4万 热度难度
数据库Hbase

知识考点

AI 面试

面试题答案

一键面试

行式存储

  1. 数据处理流程
    • 查询:对于涉及整行数据的查询场景,行式存储效率较高,因为数据按行连续存储,一次I/O操作能获取整行数据。例如在传统关系型数据库应用中,查询用户的全部信息,行式存储可以快速定位到用户所在行并返回所有字段。
    • 写入:每次写入需更新整行数据,即使只修改一个字段。若频繁修改不同字段,会导致大量的I/O操作,因为每次修改都可能涉及整行数据的重写。
  2. 网络架构
    • 网络传输时,以行为单位传输数据。对于整行数据的传输需求,网络带宽利用率较高,但如果只需要部分字段,会造成带宽浪费,因为会传输不必要的字段数据。
  3. 节点负载均衡
    • 数据按行存储相对规整,在节点负载均衡方面,基于行的切分和分配较为直观。可以根据行数或行的大小将数据均匀分配到各个节点,但如果行大小差异较大,可能导致负载不均衡。例如有些行数据量特别大,存储该大行数据的节点负载会相对较重。
  4. 适用业务需求
    • 适用于OLTP(联机事务处理)类型的业务,这类业务需要频繁读写整行数据,对事务完整性要求高,如银行交易系统,每次交易都要更新用户账户的多个字段,行式存储能高效支持这种操作。

列式存储

  1. 数据处理流程
    • 查询:在聚合查询(如SUM、COUNT、AVG等)和仅涉及部分列的查询场景下优势明显。因为列式存储将相同列的数据存储在一起,在进行聚合操作时,只需读取相关列的数据,减少I/O量。例如统计某地区所有用户的年龄总和,只需读取年龄列数据。
    • 写入:写入操作相对复杂,因为需要将不同列的数据分别写入对应的列存储区域。如果一次写入涉及多个列,可能需要多次I/O操作。
  2. 网络架构
    • 网络传输时,对于只涉及部分列的查询,能有效减少网络传输量,提高带宽利用率。但如果需要整行数据,可能需要从多个列存储区域获取数据,增加网络交互次数。
  3. 节点负载均衡
    • 基于列的负载均衡较复杂,因为不同列的数据量可能差异很大。例如一些列可能有大量的空值,数据量小,而一些列数据量大。需要综合考虑列的大小、查询频率等因素来分配列到不同节点,以实现负载均衡。
  4. 适用业务需求
    • 适用于OLAP(联机分析处理)类型的业务,这类业务通常涉及大量数据的聚合分析,对单条记录的读写操作相对较少,如数据仓库中的数据分析场景,需要对海量数据按列进行统计分析,列式存储能大幅提升性能。

列簇式存储(以HBase为例)

  1. 数据处理流程
    • 查询:在查询特定行和列簇数据时效率较高。HBase通过行键快速定位行,再通过列簇定位列数据。例如在社交应用中,查询用户的基本信息(存储在一个列簇)和社交关系(存储在另一个列簇),能快速定位到相关数据。
    • 写入:写入操作以行和列簇为单位,在写入同一行不同列簇数据时相对高效。如果写入的数据分散在不同行和列簇,可能会影响写入性能。
  2. 网络架构
    • 网络传输方面,对于按行和列簇请求的数据,能有效传输相关数据。但如果查询跨越多个列簇或行,可能会增加网络传输量和交互次数。
  3. 节点负载均衡
    • HBase通过Region来实现负载均衡,Region按行键范围划分,每个Region可以包含多个列簇。在负载均衡时,主要根据Region的负载情况进行迁移。但如果列簇数据分布不均匀,可能导致部分Region负载过重。例如某个列簇数据增长迅速,包含该列簇的Region会承受较大压力。
  4. 适用业务需求
    • 适用于海量数据存储和高并发读写场景,且数据具有一定的关联性和结构化特点。如物联网数据存储,设备的不同类型数据(如温度、湿度、位置等)可以按列簇存储,同时设备产生的数据量巨大且读写并发高,HBase的列簇式存储能较好满足需求。

在结合业务需求做出最优选择时,需要考虑以下几点:

  1. 业务类型:如果是OLTP业务,优先考虑行式存储;如果是OLAP业务,列式存储更合适;如果是海量数据高并发读写且数据有一定结构化关联的业务,列簇式存储如HBase可能是最佳选择。
  2. 查询模式:频繁整行查询选行式;频繁列聚合或部分列查询选列式;按行和列簇查询居多选列簇式。
  3. 数据量和并发度:数据量小、并发低时,行式存储实现简单;数据量极大、并发高,列簇式存储(如HBase)在扩展性和并发处理上有优势。