Home

Calcite-2:关系代数、架构与处理流程

了解关系代数有助于从逻辑或者各类名词上理解 Calciate,惭愧的是我只记得学过高等代数、抽象代数,好在看了下影响不大,其实从使用关系数据库的时候就已经潜移默化的有这些概念了。 1. Relational Algebra Relational algebra is at the heart of Calcite. 关系代数是跟 SQL 一一对应的,一条 SQL 查询语句,可以转换为一个由关系运算符组成的树。这么说可能有些读者没有准确的概念,举两个例子说明: 比如上一篇笔记里的 SQL: SELECT name FROM EMPS WHERE EMPNO = 1 转化成关系代数: π name σ empno = 1 emps 图形化的结果: 其中 ...

Read more

Calcite-1:Tutorial

最开始了解 Calcite 的时候,印象最深的是众多名词。而由于 Calcite 的定位,其应用方式又多种多样,所以有一种以为看懂了,却还是不知道如何应用的感觉。这篇笔记,记录下我对 Calcite 的理解。 1. 背景 2005年,Michael Stonebraker 发表了“One size fits all” is an idea whose time has come and gone,即传统关系型数据库一招吃遍天的时代过去了。 事实证明确实如此,随着数据量的增长,各种数据库层出不穷,各有所长。除非硬件突破,短时间内我们也很难看到一统江湖(One size fits all)的局面。 2015年,Julian Hyde 在 XLDB 上做了一次演讲,题为Apache ...

Read more

数据湖笔记之一:Z-Order

Z-order curve,1966年就已经在应用了。但是在大数据崭露头角,似乎才是这几年的事情。最近看了数据湖的一些技术,想从细处着手,介绍下我理解的 Z-Order. 1. 背景 Z-Order 在地图的场景中应用非常常见,比如查找地图上某个点附近的信息。 假定我们的地图数据里有 N 个点,记录了对应的位置坐标(经纬度)、id、名称、信息等,要查找当前坐标附近 10 公里内的餐馆。最朴素的想法就是计算所有餐馆跟当前位置的距离,过滤 <= 10 公里的结果。不过数据量大肯定不行,太多的冗余计算了。 按照我的理解,坐标轴天然是递增的,所以二分法是一个不错的解决方案:如果在一维世界(x维度),创建一个 x->id 的辅助数组,性能足够。类比到二维世界(x、y维度),通...

Read more

Flink - Why Checkpoint

上篇笔记介绍了 Checkpoint 相关的代码, 关于源码的分析网上文章很多,通过断点调试也能大概了解 Checkpoint 的实现。 Checkpoint 的原理,在 Lightweight Asynchronous Snapshots for Distributed Dataflows 里有系统的描述,思路来源于最开始的这篇文章:Chandy-Lamport algorithm,没错,就是发明 Paxos 算法的那位。 这篇笔记希望以简单易懂的方式介绍下我理解的 why checkpoint 以及解决思路。 1. Why 存储系统里的 snapshot,记录的是某个时间点存储的状态,存储可以恢复到这个时间点,用户也可以指定读取这个时间点时的存储内容。不同的 snapsh...

Read more