Paul Jungwirth:TQuel论文

Paul Jungwirth:TQuel论文

💡 原文英文,约2000词,阅读约需8分钟。
📝

内容提要

本文探讨了Postgres 19中时间关系代数的优化问题。作者通过研究TQuel模型,发现传统代数恒等式(如笛卡尔积对差运算的分配律)在时间操作符下不成立,原因是保留输入有效时间会破坏代数性质。作者建议将有效时间视为属性限定符而非普通属性,并计划通过CustomScans实现更优的时间操作符执行。

🔎

延伸解读

有效时间应视为属性限定符

文章通过反例说明,若将输入有效时间作为普通属性保留在结果中,会导致笛卡尔积对差运算的分配律失效。作者因此认为,有效时间在语义上应作为其他属性的限定符,而非普通属性。这解释了为何SQL:2011的PERIOD类型不能像普通值那样被SELECT或传递,尽管这限制了组合性,但符合关系代数性质。

快照可归约性的实用价值

论文指出,对于同质关系,时间操作符具有快照可归约性:可以先对基表取快照再执行非时间操作,结果与先执行时间操作再取快照相同。这意味着现有应用迁移到时间表时,无需重写查询,只需定义视图过滤当前时间即可。这降低了采用时间功能的门槛,尤其适用于复杂报表。

时间操作符优化需谨慎

传统代数恒等式在时间操作符下并非全部成立,例如笛卡尔积对差运算的分配律失效。这给查询优化器带来挑战,因为基于该恒等式的变换可能导致错误结果。作者计划通过CustomScans实现专用执行节点,并借助relsim工具验证恒等式,为未来Postgres支持时间连接和集合操作奠定基础。

Q&A

TQuel模型中的有效时间是如何表示的?

TQuel模型中的有效时间不是区间,而是由多个时间片段(chronons)组成的集合,即多范围(multirange)。这种表示方式可以表达非连续的有效时间。

为什么笛卡尔积对差运算的分配律在时间操作符下不成立?

因为时间操作符会保留输入元组的有效时间,导致在计算差运算时,有效时间不匹配,从而破坏了代数恒等式。如果丢弃输入的有效时间,该分配律就成立。

TQuel中的有效时间与SQL:2011中的PERIOD有何不同?

TQuel的有效时间是每个属性独立的,且用多范围表示;而SQL:2011的PERIOD是元组级别的单一区间。但SQL:2011的元组可以转换为TQuel的格式,即把元组有效时间复制到每个属性上,形成同质关系。

什么是快照可归约性?它有什么实际应用?

快照可归约性是指对于同质关系,时间操作符可以先对基表取快照再执行非时间操作,结果与先执行时间操作再取快照相同。这意味着在查询某个时间点的数据时,可以通过视图过滤历史表,无需重写查询,也无需使用时间操作符。

作者计划如何优化Postgres中的时间操作符?

作者计划通过实现自定义扫描(CustomScans)来优化时间操作符的执行,并利用查询规划器进行变换。他开发了temporal_ops扩展,并希望注入CustomScans以实验规划器变换。

作者认为有效时间应该被视为什么?为什么?

作者认为有效时间应该被视为属性的限定符,而不是普通属性。因为保留输入有效时间会破坏代数性质,而将有效时间视为限定符可以保持代数恒等式成立。

作者使用relsim工具做了什么?

作者使用relsim(一个关系计算器)来探索时间关系代数中的恒等式,特别是找到了笛卡尔积对差运算分配律失效的反例,并逐步分析原因。

🏷️

标签

➡️

继续阅读