与 MySQL 的 B+ 树索引相比,LSM-tree(Log-Structured Merge-tree)在写入性能上有显著优势,但在读取性能上可能会有所牺牲。
然而,TDSQL Boundless 作为一款分布式数据库,提供了多种机制来提升查询性能:
1. 垂直/水平扩容:TDStore 可以通过增加更多的节点来扩展数据库的处理能力,从而提高每秒查询率(QPS)。这是单机 MySQL 无法实现的,因为单机 MySQL 的性能受限于单个服务器的硬件资源。
2. 优化策略:即使在单节点上,TDSQL Boundless 也采用了一系列优化策略来提高读取性能:
Leveling Compaction:TDSQL Boundless 将所有数据(包括主键和索引)存储在一个大的、有序的键值对空间中,这些数据在物理磁盘上对应多个 SST 文件,分为 L0 到 L6 共七层。Leveling Compaction 策略确保了除了 L0 层之外的每一层中键的唯一性,这有助于加快查询速度。L0层较为特殊,允许文件间存在范围重叠,但 TDSQL Boundless 会限制 L0 层的文件数量,通常不超过四个。当需要访问数据时,TDSQL Boundless 首先检查内存 memtable,如果数据不在 memtable 中,则按层次顺序检查磁盘上的 SST 文件。由于 L1 到 L6 层的键是唯一的,因此每层只需检查一个 SST 文件即可确定目标数据是否存在。
Bloom Filter:在查找数据时,TDSQL Boundless 使用布隆过滤器来快速排除那些不可能包含目标键的 SST 文件,这样可以避免不必要的磁盘查找,节省资源。
Block Cache:TDSQL Boundless 利用块缓存来存储热点数据,减少对磁盘的 I/O 操作,进一步提高读取性能。
综上所述,尽管基于 LSM-tree 的 TDSQL Boundless 在读取性能上可能不如优化过的 MySQL 实例,但通过分布式架构和一系列优化措施,TDSQL Boundless 仍然能够提供高效的读写性能,特别是在大规模数据处理和高并发访问的场景中。