谈谈Rocksdb的del优化--CompactOnDeletionCollector

参数配置的关系

struct Options : public DBOptions, public ColumnFamilyOptions

struct ColumnFamilyOptions : public AdvancedColumnFamilyOptions

ImmutableDBOptions 就是不可变的一些参数

BlockBasedTableOptions 与上面没有关系,构建block cache的时候用

在 AdvancedColumnFamilyOptions 里面有个
TablePropertiesCollectorFactories table_properties_collector_factories
注意上面的TablePropertiesCollectorFactories 其实是一个vector 里面每个元素都是TablePropertiesCollectorFactory

ImmutableCFOptions 里面也有
Options::TablePropertiesCollectorFactories table_properties_collector_factories;

CompactOnDeletionCollector的作用

关于 NewCompactOnDeletionCollectorFactory
其实NewCompactOnDeletionCollectorFactory 只是一个方法,它返回了 CompactOnDeletionCollectorFactory 类。
而上面这个类的CreateTablePropertiesCollector方法返回了最终的 CompactOnDeletionCollector。
CompactOnDeletionCollector 就是一个sst的信息收集器,继承自 TablePropertiesCollector。

它的核心所用就是就是判断一个sst是否应该被标记为待合并。
他有三个参数

size_t sliding_window_size,
 size_t deletion_trigger,
 double deletion_ratio

具体来说就是,就是两个规则

  • 如果连续sliding_window_size个key里面有超过deletion_trigger个key都是删除,那就认为这个sst可以标识为被删除。
  • 如果整个stt里面删除key的数量除以总key的数量超过deletion_ratio,那就认为这个sst可以标识为被删除。

CompactOnDeletionCollector的内部实现

对于规则1的实现是在CompactOnDeletionCollector::AddUserKey里面
核心逻辑就是把sliding_window_size分成128个小段,当处理了sliding_window_size个key之后,128段也走完了,就把第1段的数据抛弃掉,接着处理第129段数据。
(上面的描述很差劲,但是代码就是这么个语义,sliding_window_size的语义就是一个滑动窗口,上文说的每个段就是滑动窗口里面的滑动窗口)
对于规则2的实现是在CompactOnDeletionCollector::Finish
这个比较简单,就不说了。

CompactOnDeletionCollector的外部调用

CompactOnDeletionCollector 本身的逻辑已经清楚了,那谁来调用它呢?

在AdvancedColumnFamilyOptions里面有一个 table_properties_collector_factories
我们要引入CompactOnDeletionCollectorFactory特性的时候,把它加到table_properties_collector_factories里面即可。
在GetIntTblPropCollectorFactory函数里面,会把我们设定的factory包装成一个个UserKeyTablePropertiesCollectorFactory,然后放到ColumnFamilyData的int_tbl_prop_collector_factories_里。
在构建sst的BuildTable方法里,传入了int_tbl_prop_collector_factories_
之后传递的逻辑大家自己看吧。

每次调用BlockBasedTableBuilder::Add方法内部都会调用NotifyCollectTableCollectorsOnAdd方法,最终调用到CompactOnDeletionCollector::AddUserKey方法

那CompactOnDeletionCollector的最终逻辑结构:是否需要标记待compact呢?
TableBuilder里面有个NeedCompact方法,sst写完之后,会调用 NeedCompact,把CompactOnDeletionCollector的结果写到FileMetaData里面的 marked_for_compaction。

如何影响compact源文件的选择

在VersionStorageInfo::ComputeCompactionScore 里面ComputeFilesMarkedForCompaction会记录哪一层的哪些文件被标记了marked_for_compaction。

之后就是LevelCompactionBuilder::SetupInitialFiles 里面的PickFilesMarkedForCompaction
另外这里大家可以注意到,在PickFilesMarkedForCompaction里,是覆盖了上层的start_level_inputs->files的。

如何影响compact源文件的选择 大家可以参考 拙作
谈谈RocksDB的Compaction1

  • 21
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
鲸鱼优化(Whale Optimization Algorithm)是一种模拟鲸鱼群体行为的优化算法,灵感来自于鲸鱼群体中个体之间的协同行动。该算法结合了全局搜索和局部搜索的优点,能够有效地寻找复杂问题的最优解。 深度学习是一种基于人工神经网络的机器学习方法,通过多层次的神经元结构进行模式识别和数据分析。而极限学习机(Extreme Learning Machine)是一种以单隐层前馈神经网络为基础的机器学习算法,其强调快速训练和相对较少的参数调整。 鲸鱼优化-delm深度学习极限学习机结合了鲸鱼优化和深度学习极限学习机的特点,具有以下优势: 首先,鲸鱼优化算法通过模拟鲸鱼群体的行为,能够在解空间中进行全局搜索,从而找到问题的全局最优解或者接近最优解的解。这对于复杂的深度学习模型参数优化非常有帮助。 其次,极限学习机作为深度学习的一种变种,具有快速训练和较少参数调整的特点。这意味着鲸鱼优化-delm深度学习极限学习机在解决深度学习问题时,具有更高的效率和更好的可扩展性。 最后,鲸鱼优化-delm深度学习极限学习机的结合,能够同时发挥两者的优点,既能进行全局搜索,又能实现快速训练和调整参数。这使得算法在解决复杂问题时更加灵活和高效。 综上所述,鲸鱼优化-delm深度学习极限学习机是一种能够有效解决深度学习问题的优化算法,其集成了鲸鱼优化和极限学习机的特点,具有全局搜索和快速训练的优势,对于提高深度学习模型的性能和效率具有重要意义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值