pack作为mysql列存储引擎中单个列的最小读取单元, 本文分析pack的使用方, 主要在于梳理pack使用方对于列中数据的使用.
对列的读取通过VirtualColumn进行, 而VirtualColumn类又通过VCPackGuardian对读取的pack做了一层的缓存控制.
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 {