Skip to main content

存储引擎

OLTP 数据库存储引擎

在 OLTP (Online Transaction Processing) 环境中,存储引擎的选型通常考虑 B+Tree 和 LSM-Tree 两种主要的数据结构。

B+Tree 是一种基于磁盘的平衡树结构,它适用于高度随机的读写操作。B+Tree 的特点是有序存储、支持快速的范围查询和索引扫描,适用于点查询和范围查询较为均衡的场景。B+Tree 适合于处理大量的随机读写操作,并且具有较低的写放大效应,适用于保持数据一致性和高并发性的 OLTP 环境。

LSM-Tree (Log-Structured Merge Tree) 是一种基于日志结构的树状数据结构,它适用于写密集型的场景。LSM-Tree 的特点是将写操作追加到日志文件中,通过后台的合并操作将数据写入磁盘的多个层级,提供高吞吐量的写入性能。LSM-Tree 适合于高度写入和批量写入的场景,具有较高的写放大效应,适用于写优先的 OLTP 环境。

选择 B+Tree 还是 LSM-Tree 存储引擎需要考虑以下因素:

  1. 读写比例:如果读操作比写操作更为频繁,且需要快速的点查询和范围查询能力,那么 B+Tree 是一个合适的选择。

  2. 写入性能需求:如果写入性能是关键考虑因素,而且数据的写入模式更偏向于批量写入或高并发写入,那么 LSM-Tree 可能更适合。

  3. 数据一致性要求:LSM-Tree 在写入过程中可能存在写放大和数据重叠的情况,因此在一些对数据一致性有较高要求的场景中,B+Tree 可能更可靠。

  4. 硬件资源:B+Tree 通常需要更多的内存来维护索引结构,而 LSM-Tree 则对磁盘空间的利用更为高效。因此,在硬件资源有限的情况下,LSM-Tree 可能是一个更好的选择。

综上所述,B+Tree 和 LSM-Tree 都是常见的 OLTP 存储引擎,选择合适的存储引擎需要根据具体的应用场景和需求进行权衡和评估。

OLTP 数据存储引擎索引

在 OLTP (Online Transaction Processing) 数据库中,常见的二级索引类型包括:

  1. B+Tree 索引:B+Tree 是最常见的二级索引类型之一。它使用 B+Tree 数据结构来存储索引数据,提供快速的点查询和范围查询能力。B+Tree 索引适用于数据的有序存储和高度随机的读写操作。

  2. Hash 索引:Hash 索引使用哈希算法将索引键映射到存储桶中,提供高效的等值查询能力。Hash 索引适用于等值查询较为频繁的场景,但不支持范围查询。

  3. 全文索引:全文索引用于对文本数据进行关键词搜索。它使用特定的算法和数据结构来建立倒排索引,提供基于关键词的全文搜索能力。常见的全文索引算法包括倒排索引和三角剖分等。

  4. R 树索引:R 树索引用于高维空间数据的索引,支持范围查询和近邻查询。它使用 R 树数据结构来组织索引数据,适用于地理信息系统 (GIS) 和空间数据库等领域。

OLAP 数据库存储引擎

在 OLAP (Online Analytical Processing) 数据库中,为了支持高效的数据分析和查询,通常会采用以下算法或数据结构作为存储引擎的基础:

  1. 列存储(Columnar Storage):列存储将每个列单独存储,而不是按行存储。这种存储方式适合于 OLAP 查询中需要对特定列进行聚合和分析的场景,可以减少数据的读取量,提高查询性能。

  2. 压缩算法:为了节省存储空间和提高数据读取速度,OLAP 数据库通常会采用各种压缩算法对数据进行压缩。常见的压缩算法包括字典编码(Dictionary Encoding)、位图压缩(Bitmap Compression)、矢量压缩(Vector Compression)等。

  3. 数据索引:为了加速查询和检索操作,OLAP 数据库会使用特定的索引结构来支持高效的数据访问。常见的索引结构包括 B+ 树索引、Bitmap 索引、倒排索引、Zone Maps等。

  4. 向量化处理(Vectorization):向量化是一种通过对一组数据进行批量处理来提高计算效率的技术。在 OLAP 数据库中,可以将一批数据作为向量进行操作,以提高查询和计算的效率。

OLAP 数据存储引擎索引

OLAP (Online Analytical Processing) 数据库中,通常会使用特定的索引类型来支持高效的分析查询。以下是 OLAP 数据库中常见的二级索引类型:

  1. Bitmap 索引:Bitmap 索引使用位图数据结构来记录每个数据值在列中出现的位置。它适用于低基数列(Cardinality 低)的索引,可以高效地进行位运算来进行多个条件的并集、交集等操作。

  2. 列存储索引:列存储索引将每个列按照列存储的方式进行索引。它适用于 OLAP 查询中需要对特定列进行聚合操作的场景,可以减少数据的读取量,提高查询性能。

  3. 倒排索引:倒排索引(Inverted Index)适用于文本搜索和全文检索场景。它将文档中的单词映射到出现该单词的文档列表中,以支持快速的文本搜索和相关性排序。

  4. 数据立方体索引:数据立方体索引是一种针对多维数据集的索引结构,用于支持多维查询和切片操作。它可以高效地进行数据的聚合、切片、钻取等操作。

  5. Zone Maps:Zone Maps(区域映射)是一种用于数据压缩和查询加速的索引技术,常用于列式存储的数据库系统中。它通过将数据划分为连续的区域,每个区域维护一个元数据结构,记录该区域内数据的统计信息。通过使用这些统计信息,数据库系统可以在查询过程中快速过滤掉不满足查询条件的区域,从而减少需要扫描的数据量。

分布式 OLTP 存储引擎

一般分布式存储引擎,都是在 B+Tree 或者 LSM-TREE 单机存储引擎基础上,基于共识算法(Raft/Paxos/ZAB)进行多副本数据一致性保证,以及在数据分片,拆分分片,合并分片,添加节点等流程中用共识算法,基于日志的一致性快照 + 增量流式复制 Log,保障数据跨节点迁移过程中的一致性。

其中比较关键的技术:共识算法以及一致性 Hash(数据分片)

Raft 集群成员变更

Raft 集群成员变更

分布式数据分布

PolarDB-X 数据分布解读(二) :Hash vs Range