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 {
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: mysql