Oceanbase的存储引擎基于什么数据结构?它如何优化写性能。

Oceanbase的存储引擎基于什么数据结构?它如何优化写性能。

oceanbase的存储引擎是LSM的架构,分为SSTABLE 基线数据和MEMTABLE内存中的数据,所有的变更的数据都会先写在内存中,不会直接操作SSTABLE,由于写入数据都在内存中,这样大大提高了写入数据的性能

OceanBase 数据库存储引擎基于 LSM-Tree(Log-Structured Merge-Tree) 架构,并对写入性能进行了多种优化措施。以下是对相关信息的综合分析:
核心结构:

LSM-Tree 架构:
    OceanBase 使用 LSM-Tree 的变体架构,将数据分为两部分:
        MemTable(内存中的增量数据):支持读写操作。
        SSTable(磁盘上的基线数据):只读,一旦生成不再修改。

数据更新流程:
    所有的 DML 操作(插入、更新、删除)首先写入 MemTable。
    当 MemTable 达到一定大小后,会转储为 SSTable(称为 Compaction 或合并)。
    查询时,系统需同时查询 MemTable 和 SSTable,并进行归并处理。

写入性能优化机制:

减少随机 I/O:
    LSM-Tree 将所有写操作集中于内存的 MemTable 中,当达到阈值后才顺序写入磁盘的 SSTable。
    这种设计将随机写转化为顺序写,从而显著提升写入吞吐能力。

高效的 Compaction 策略:
    OceanBase 在合并过程中采用宏块粒度管理,每个宏块大小为 2MB,内部再拆分成微块。
    合并期间仅重用有变化的数据块,避免重复读取未修改的宏块,从而减少写放大。
    相比传统 LSM-Tree 数据库,这种策略大幅降低了合并带来的性能开销。

MemTable 控制机制:
    当 MemTable 内存使用达到上限时,OceanBase 提供了多种写入控制方式:
        开启写入限速,在接近上限时主动限制客户端导入速度。
        租户内存扩容(如果环境资源允许)。
        调整租户内存中 MemTable 的比例,让转储更快发生,释放可用内存空间。

高性能事务支持:
    支持大事务和长事务的落盘机制,保证事务的正常提交或回滚。
    采用多级合并与转储机制,帮助用户在性能与空间之间找到平衡点。

压缩与存储优化:
    基线数据(SSTable)采用行列混合编码结合通用压缩算法。
    数据压缩率相较传统数据库提升 10+ 倍,同时不影响写入和查询性能。

行缓存与布隆过滤器:
    对于高频 OLTP 场景,OceanBase 实现了行缓存(Row Cache),加速单行点查性能。
    针对“空查”场景,构建了布隆过滤器(Bloom Filter),并对其进行缓存,避免不必要的数据访问。

总结

OceanBase 存储引擎基于 LSM-Tree 架构,结合传统关系型数据库的优点,形成了高效且稳定的存储解决方案。它通过将数据划分为 内存中的 MemTable 和 磁盘上的 SSTable,利用顺序写入、宏块优化、多级缓存等技术,有效提升了写入性能并降低了存储成本。

其关键优势包括:

LSM-Tree 结构实现高效写入
宏块管理机制减少写放大
MemTable 控制防止内存过载
行缓存与布隆过滤器优化小查询
高压缩比降低存储成本

@论坛小助手

OceanBase 的存储引擎基于 LSM-Tree (Log-Structured Merge Tree) 数据结构。LSM-Tree 是一种将数据分成内存中的 MemTable 和磁盘中的 SSTable 的数据结构。所有数据更新操作都在内存中的 MemTable 中完成,当 MemTable 达到一定阈值后,会触发 Compaction 过程,将数据转储到磁盘中的 SSTable 中。这种架构有以下优点:

  1. 写性能优化

    • 内存操作:所有的写操作都在内存中进行,这大大提高了写入性能。
    • 顺序 I/O:当 MemTable 达到一定阈值后,数据会被批量转储到磁盘中,这样可以将随机 I/O 转化为顺序 I/O,提高写入吞吐能力。
    • Compaction:定期进行 Compaction 操作,将多个小的 SSTable 合并成一个大的 SSTable,进一步减少磁盘 I/O 操作,提高性能。
  2. 数据压缩

    • 基线数据(SSTable)在磁盘中以更紧凑的方式存储,并且使用通用压缩算法进行压缩,从而获得更好的压缩比,减少存储成本。
  3. 读写分离

    • 增量数据放在内存中,基线数据放在 SSD 盘中,读操作时需要合并内存中的增量数据和磁盘中的基线数据,但通过 Block Cache 和 Row Cache 优化了读性能。

详情请参考:

  1. 体验并行导入和数据压缩
  2. 产品 FAQ
  3. 在您开始前
  4. 集群管理 FAQ
  5. OceanBase 数据库概述