
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
缓存技术随着互联网的不断发展而被越来越多的程序员应用到不同软件开发项目之中,而本文我们就通过案例分析来简单了解一下,数据库缓存技术类型分析。
1、RowCache
传统关系型数据库并不对单独的某行进行缓存,OB基于LSM的存储引擎却实现了行级缓存。OB的RowCache缓存具体的数据行,在进行Get/MultiGet查询时,可能会将对应查到的数据行放入RowCache,这样在进行热点行的查询时,就可以极大地提升查询性能。
2、BlockCache
传统的关系数据库中,缓存是以IO页面为单位进行缓存的。在LSM为存储引擎的数据库中,IO页面为单位的缓存策略也需要随着LSM结构来进行适配。我们之前提到过,OB的IO读的小单位是微块,OB的BlockCache是以微块(MicroBlock)为单位的,其缓存的数据是解压缩后的微块数据,大小是变长的。
另外,数据查询的时候,如果没有在RowCache或者MemTable中查询到数据话,我们需要去BlockCache或者磁盘中查询数据。查询数据的一步是需要先确定数据在哪个微块,这也需要我们将一部分微块的索引缓存在内存中。
OB的BlockIndexCache即缓存微块的索引,类似于BTree的中间层,在数据结构上和BlockCache有一些区别,由于中间层通常不大,BlockIndexCache的命中率通常都比较高。
3、FilterCache
LSM树是基于排序的的存储结构,这类结构通常在进行点查询的时候,对不存在的数据的查询和确认是不高效的。不存在的数据,通常我们在内存中也无法缓存,内存查询也就无法命中,只有通过IO去读取数据所在范围的SSTable(微块)来确认数据是否存在。这样对于数据的存在性查询将变得非常低效。因此各种LSM树的实现中都引入了BlookFilter来进行存在性过滤,OB也在宏块(MacroBlock)层引入了BloomFilter用于数据存在性过滤。
BloomFilter是一种只能插入元素,无法删除元素的数据结构。在传统的关系数据库中,IO页面(Page)随时可能会被应用修改,一行数据随时都可能被删除,因此无法高效的使用BloomFilter来作为空数据过滤器。而基于LSM树存储引擎则不同,其磁盘上的数据,在下一次合并(Compaction)之前,都是不可变的。Compaction间隔时间通常都是以小时为单位,这种场景非常适合BloomFilter的使用。BloomFilter也是一种可以非常容易通过空间来调整查询错误率的数据结构,应用可以轻易的通过调整每个元素所占用的空间(Rowperbits),来调整查询的错误率(即数据不在SSTable中,但是通过BloomFilter查询被确认存在的概率)。
OB中的BloomFilter的构建策略是按需构建,当一个宏块上的空查次数超过某个阈值时,就会自动构建BloomFilter,并将BloomFilter放入Cache。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加抖音太原达内IT培训学习了解。