摘要:
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_.Unlock