Reinforcement Learning with Tree LSTM for Join Order Selection学习笔记
前言
现存的基于DRL的方法有如下两个缺点,因此这篇工作提出了RTOS。文章链接:http://da.qcri.org/ntang/pubs/icde20jos.pdf .
- 现存方法使用的特征向量无法捕获连接树的结构信息
- 当数据库模式更改(例如,添加列/表或多别名表名称)时,现存方法需要新的不同长度的向量输入并重新训练神经网络。
方法
表示
Query
查询包含\(n\)个表,则定义\(m\)为\(n*\)的矩阵,其中\(m_{i,j}\)为1或0表示第\(i,j\)个表是否连接。将\(m\)展开为一维得到向量\(v\),经过全连接层和激活函数的计算得出查询的表示\(R(q)\)。

Column
定义向量\(F(c)\),与该列在查询中的查询条件有关。其中各值的定义方法以及特殊情况的处理已在论文中说明。
![]()
再定义与\(c\)相关的矩阵\(M(c)\)。\(F(c)\)与\(M(c)\)做矩阵乘积可得列的表示\(R(c)\)。
![]()
Table
定义\(M(c)\),即将一个表中\(k\)个列的表示拼接。
![]()
对\(M(c)\)做最大池化可得表的表示\(R(t)\)。
![]()
State
为了基于以上表示来很好地表示连接过程中的状态,本文引入了\(Tree-LSTM\)。且使用了\(Child-Sum Tree-LSTM\)和\(N-ary Tree-LSTM\)两种方法结合的方式。具体来讲:
- 叶子节点:基于上述表示或者由$Child-Sum Tree-LSTM$计算得出。
- 中间节点:由$Child-Sum Tree-LSTM$计算得出。
- 根节点$h^{root}$:由$Child-Sum Tree-LSTM$计算得出。
根节点可以代表整个连接状态对应的森林
![]()
将森林的表示与查询的表示拼接可以表示连接过程中的任何一个状态:
![]()
Rtos的强化学习策略
本文采用Deep Q learning的方法,并且在训练阶段主要采用Cost estimation评估代价,微调阶段再加入真实的latency来微调网络参数。
其中
表示最优连接决策与当前采取的决策之间的奖励差。
在cost training阶段设置\(W_L,W_c\)分别为1,0。在latency tuning阶段设置\(W_L,W_c\)分别为1,1。
对数据库修改和多名同表的处理
文中写得很清楚也很简单,略
实验
在cost、latency以及收敛速度方面均有相当程度的提升;具体设置以及结果见论文。
总结思考
已写在其他地方

浙公网安备 33010602011771号