Coding Husky

  • 首页

  • 关于

  • 标签

  • 归档

Calcite 中新增的 Top-down 优化器

发表于 2021-10-31 | 更新于 2021-11-01 |

众所周知,Apache Calcite 是为数不多的开源 Volcano/Cascades 查询优化器实现之一,最早脱胎于 Hive 的优化器,后来也被 Flink 等一众项目采用。

但事实上 Calcite 中的 VolcanoPlanner 并非像论文中描述的那样是一个 top-down 优化器。去年阿里云 MaxCompute 团队向 Calcite 提交了 PR,引入了新的 top-down 优化选项,同时也弥补了之前缺失的剪枝、pass-through 等特性。

本文假设读者已经对 Apache Calcite 以及 Volcano/Cascades 优化器的原理比较熟悉。

阅读全文 »

从 Google Mesa 到 Apache Doris

发表于 2021-03-06 | 更新于 2021-10-31 |

Apache Doris 原名是 Palo,由百度于 2017 年开源,Palo 这个词来自 OLAP 的反转,寓意这是一个 OLAP 系统。

初次看到它的时候以为是又一个数据仓库产品,没怎么关注,直到最近才发现和我们熟悉的 Greemplum、Impala 等等有不少区别,其中最有特色的是它的数据模型,借鉴自 Google 2014 年公开在 VLDB 上的 Mesa。本文的前半部分也会聊聊 Doris/Mesa 的数据模型是怎样的。

阅读全文 »

分布式事务中的时间戳

发表于 2020-12-03 | 更新于 2021-10-31 |

时间戳(timestamp)是分布式事务中绕不开的重要概念,有意思的是,现在主流的几个分布式数据库对它的实现都不尽相同,甚至是主要区分点之一。本文聊一聊时间戳的前世今生,为了把讨论集中在主题上,假设读者已经对数据库的 MVCC、2PC、一致性、隔离级别等概念有个基本的了解。

阅读全文 »

2020 年杭州买房日志

发表于 2020-07-02 | 更新于 2021-10-31 |

作为一只生于 1994 年的狗子,今年也有 26 岁,按俗话说就是老大不小了。大概从半年之前开始,随着女票毕业,我们俩决定开始在杭州参与摇号,预期周期半年到一年。无奈我厂附近的房地产越来越火热,中签率动辄就是个位数。就这么过了半年。 转机出现在今年4月1号愚人节,杭州人才优先摇号政策开始执行,凡是人才中签率基本都是 100% (然而并不是),这对我是重大利好,于是立即改变策略,只摇最优质的盘。 ...

阅读全文 »

YugabyteDB 介绍

发表于 2020-01-13 | 更新于 2021-10-31 |

Yugabyte DB 是一个全球部署的分布式数据库,和国内的 TiDB 和国外的 CockroachDB 类似,也是受到 Spanner 论文启发,所以在很多地方这几个数据库存在不少相似之处。

与 Cockroach 类似,Yugabyte 也主打全球分布式的事务数据库——不仅能把节点部署到全球各地,还能完整支持 ACID 事务,这是他最大的卖点。除此以外还有一些独特的特性,比如支持文档数据库接口。如果我猜的没错,Yugabyte 早期被设计成一个文档数据库,后来才调整技术路线开始主打 SQL 接口。

阅读全文 »

G1 垃圾收集器

发表于 2019-11-01 | 更新于 2021-10-31 |

在过去很长一段时间内,HotSpot JVM 的首选垃圾收集器都是 ParNew + CMS 组合。直到 JDK7 中 Hotspot 团队首次公布了 G1(Garbage-First),并在 JDK9 中用 G1 作为默认的垃圾收集器。我们团队最近也将用了很多年的 CMS 换成了 G1 垃圾收集器。

本文主要从 G1 的论文 Garbage-First Garbage Collection 出发,结合其他较新的白皮书等,讲解 G1 垃圾收集器的工作原理。

阅读全文 »

Javadoc 最佳实践

发表于 2019-09-06 | 更新于 2021-10-31 |

本文翻译自 Javadoc coding standards - Stephen Colebourne's blog

Javadoc 是 Java 编程中很重要的一部分,然而却很少有人谈论如何去写好一个的 Javadoc。如果想写好 Javdoc,首先最好有一份代码规范。

Javadoc 代码规范

我之前尝试过一些 Javadoc 的标准。考虑到每个人喜好不同,我这里只想谈谈最基本的一些原则,不去涉及方方面面的细节。另外,我们只讨论 Javadoc 的格式,其内容不在本文范围之内。

阅读全文 »

SQL 窗口函数的优化和执行

发表于 2019-08-21 | 更新于 2021-10-31 |

窗口函数(Window Function)是 SQL2003 标准中定义的一项新特性,并在 SQL2011、SQL2016 中又加以完善,添加了若干处拓展。窗口函数不同于我们熟悉的普通函数和聚合函数,它为每行数据进行一次计算:输入多行(一个窗口)、返回一个值。在报表等分析型查询中,窗口函数能优雅地表达某些需求,发挥不可替代的作用。

本文首先介绍窗口函数的定义及基本语法,之后将介绍在 DBMS 和大数据系统中是如何实现高效计算窗口函数的,包括窗口函数的优化、执行以及并行执行。

阅读全文 »

SQL 子查询的优化

发表于 2019-03-20 | 更新于 2021-10-31 |

子查询(Subquery)的优化一直以来都是 SQL 查询优化中的难点之一。关联子查询的基本执行方式类似于 Nested-Loop,但是这种执行方式的效率常常低到难以忍受。当数据量稍大时,必须在优化器中对其进行去关联化(Decoorelation 或 Unnesting),将其改写为类似于 Semi-Join 这样的更高效的算子。

前人已经总结出一套完整的方法论,理论上能对任意一个查询进行去关联化。本文结合 SQL Server 以及 HyPer 的几篇经典论文,由浅入深地讲解一下这套去关联化的理论体系。它们二者所用的方法大同小异,基本思想是想通的。

阅读全文 »

JIT 代码生成技术(二)查询编译执行

发表于 2019-02-28 | 更新于 2021-10-31 |

代码生成(Code Generation)技术广泛应用于现代的数据系统中。代码生成是将用户输入的表达式、查询、存储过程等现场编译成二进制代码再执行,相比解释执行的方式,运行效率要高得多。

上一篇文章 代码生成技术(一)表达式编译 中提到,虽然表面上都叫“代码生成”,但是实际可以分出几种粒度的实现方式,比如表达式的代码生成、查询的代码生成、存储过程的代码生成等。今天我们要讲的是查询级别的代码生成,有时也称作算子间(intra-operator)级别,这也是主流数据系统所用的编译执行方式。

阅读全文 »
12…10
Eric Fu

Eric Fu

99 日志
1 分类
34 标签
© 2015 – 2022 Eric Fu