2023-01-15 mysql列存储引擎-列的读取及pack的使用方-分析
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
摘要:
pack作为mysql列存储引擎中单个列的最小读取单元, 本文分析pack的使用方, 主要在于梳理pack使用方对于列中数据的使用.
列的读取:
对列的读取通过VirtualColumn进行, 而VirtualColumn类又通过VCPackGuardian对读取的pack做了一层的缓存控制.
VirtualColumn
class VirtualColumn : public VirtualColumnBase {
public:
VirtualColumn(core::ColumnType const &col_type, core::MultiIndex *multi_index)
: VirtualColumnBase(col_type, multi_index), vc_pack_guard_(this) {}
VirtualColumn(VirtualColumn const &vc) : VirtualColumnBase(vc), vc_pack_guard_(this) {}
virtual ~VirtualColumn() { vc_pack_guard_.UnlockAll(); }
void LockSourcePacks(const core::MIIterator &mit) override { vc_pack_guard_.LockPackrow(mit); }
void UnlockSourcePacks() override { vc_pack_guard_.UnlockAll(); }
private:
core::VCPackGuardian vc_pack_guard_;
};
核心在于以下两个函数:
void LockSourcePacks(const core::MIIterator &mit) override {