Ch06-AmDB 之 Executor

Ch06-AmDB 之 Executor

December 6, 2022
AmDB
amdb

1. 接口定义 #

class IExecutor {
public:
  virtual Status Open();
  virtual Status Close();
  virtual State Prepare() = 0;
  virtual Status Work() = 0;

  InputPort& CreateInputPort();
  OutputPort& CreateOutputPort();

protected:
 std::vector<InputPort> inputs_;
 std::vector<OutputPort> outputs_;
}

2. 实现原理 #

executor 对数据的处理都是以 chunk 为单位进行处理的。

executor

  1. 依次遍历所有的 executor,使用 Connect 将 Port 连接到一起;
  2. 依次遍历所有的 executor,调用每个 executor 的 Open() 将 executor 打开(根据 executor 特性决定,大部分什么操作都不做);
  3. 依次遍历所有的 executor,调用每个 executor 的 Prepare() 将 executor 初始化(比如将 chunk 推到 Cache 中)
  4. 依次遍历所有的 executor,调用每个 executor 的 Work() 执行 executor(比如插入数据/读取数据等)
  5. 依次遍历所有的 executor,调用每个 executor 的 Close() 将 executor 关闭(大部分什么操作都不做)

当然上述的步骤只是为了方便说明而这么写的,实际上每个 executor 会被多次封装成 task 放入到队列中,由 scheduler 调度执行。