Coding Husky

  • 首页

  • 关于

  • 标签

  • 归档

从 Weld 论文看执行器的优化技术

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

Weld 是一个用于数据计算分析的高性能 Runtime(High-performance runtime for data analytics applications),使用 Rust 编写,可以很容易地集成到各种大数据计算框架中,比如 Spark SQL、NumPy & Pandas、TensorFlow 等,带来大幅的性能提升。

除了 Weld 本身的贡献,论文中提到的各种用于执行阶段的优化技术也很有意思,其中的大部分都借鉴自关系型数据库或编译器。本文除了介绍 Weld 之外,也是想对这些技术做个梳理。

本文主要内容来自于 Weld 发表在 VLDB'18 的论文。

阅读全文 »

CompletableFuture 也没有那么废柴嘛!

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

上篇文章中提到,Java 里把 Promise 叫作 CompletableFuture,相比那个只能用于线程同步的 Future,它新增了很多方法用于串联异步事件,比如常用的 thenApply、thenCompose、thenAccept 等。

如果不引入任何第三方库,CompletableFuture 仍是目前 Java 上最好的异步编程方式。之前一直觉得这个东西难用,直到我想明白一件事,证明了 CompletableFuture 虽然麻烦了点但是能做任何事情,然后用它的时候心里就没那么膈应了。

本文会以一个例子来讲解:如何把任意函数转换成异步调用风格。其实不一定要用 CompletableFuture,任何语言和框架都是适用的。

阅读全文 »

异步编程的几种方式

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

近期尝试在搬砖专用语言 Java 上实现异步,起因和过程就不再详述了,总而言之,心中一万头草泥马奔过。但这个过程也没有白白浪费,趁机回顾了一下各种异步编程的实现。

这篇文章会涉及到回调、Promise、反应式、async/await、用户态线程等异步编程的实现方案。如果你熟悉它们中的一两种,那应该也能很快理解其他几个。

阅读全文 »

JIT 代码生成技术(一)表达式编译

发表于 2018-11-29 | 更新于 2021-10-31 |

代码生成(Code Generation)技术广泛应用于现代的数据系统中。代码生成是将用户输入的表达式、查询、存储过程等现场编译成二进制代码再执行,相比解释执行的方式,运行效率要高得多。尤其是对于计算密集型查询、或频繁重复使用的计算过程,运用代码生成技术能达到数十倍的性能提升。

阅读全文 »

Calcite 对 Volcano 优化器优先队列的实现

发表于 2018-11-05 | 更新于 2021-10-31 |

Apache Calcite 中的 VolcanoPlanner 是对 Volcano/Cascades 优化器的实现。我们知道,Volcano 优化器是在搜索空间中用动态规划(DP)的方式寻找最优解,即使在用了 DP 的情况下,我们也不大可能把搜索空间遍历完。Volcano 的解决方案是定义一个优先队列,优先采用看起来更有希望的 Rule。

于是问题来了,怎样定义一个 Rule 的优先级?论文中并没有给出答案。Calcite 代码中为此定义了 Importance 的概念。然而相关的资料非常少,本文总结一下我自己的猜测和理解,如果你有不同的观点,欢迎留言讨论。

阅读全文 »

从 F1 Query 论文看 SQL 查询的执行模式

发表于 2018-10-14 | 更新于 2021-10-31 |

F1 是起源于 Google AdWords 的分布式 SQL 查询引擎,跟底下的 Spanner 分布式存储搭配,开启了分布式关系数据库——所谓 NewSQL 的时代。我们今天说的是 F1 团队在 VLDB2018 上发的文章 F1 Query: Declarative Querying at Scale,它和之前我们说的 F1 几乎是两个东西。

F1 Query 是一个分布式的 SQL 执行引擎,现在大数据领域流行的 Presto、Spark SQL、Hive 等等,都可以算在这个范畴里。类似地,F1 Query 也支持对各种不同数据源的查询,既可以是传统的关系表、也可以是 Parquet 这样的半结构化数据。

阅读全文 »

一文读懂 Apache Spark

发表于 2018-06-12 | 更新于 2021-10-31 |

Apache Spark 是当今最流行的开源大数据处理框架。和人们耳熟能详的 MapReduce 一样,Spark 用于进行分布式、大规模的数据处理,但 Spark 作为 MapReduce 的接任者,提供了更高级的编程接口、更高的性能。除此之外,Spark 不仅能进行常规的批处理计算,还提供了流式计算支持。

Apache Spark 诞生于大名鼎鼎的 AMPLab(这里还诞生过 Mesos 和 Alluxio),从创立之初就带有浓厚的学术气质,其设计目标是为各种大数据处理需求提供一个统一的技术栈。如今 Spark 背后的商业公司 Databricks 创始人也是来自 AMPLab 的博士毕业生。

阅读全文 »

处理海量数据:列式存储综述(系统篇)

发表于 2018-04-15 | 更新于 2021-10-31 |

在上一篇文章《处理海量数据:列式存储综述(存储篇)》 中,我们介绍了几种 Apache ORC、Dremel 等几种典型列式存储的数据组织格式。实践中,很多数据系统构建在 HDFS 等分布式文件系统之上,使用这些规范的格式保存数据,方便各方的业务进行分析查询。

本文将介绍若干个典型的列式存储数据库系统。作为完整的 OLAP 或 HTAP 数据库系统,他们大多使用了自主设计的存储方式,运行在多台机器节点上,使用网络进行通讯协作。

阅读全文 »

处理海量数据:列式存储综述(存储篇)

发表于 2018-04-12 | 更新于 2021-10-31 |

列式存储(Column-oriented Storage)并不是一项新技术,最早可以追溯到 1983 年的论文 Cantor。然而,受限于早期的硬件条件和使用场景,主流的事务型数据库(OLTP)大多采用行式存储,直到近几年分析型数据库(OLAP)的兴起,列式存储这一概念又变得流行。

总的来说,列式存储的优势一方面体现在存储上能节约空间、减少 IO,另一方面依靠列式数据结构做了计算上的优化。本文中着重介绍列式存储的数据组织方式,包括数据的布局、编码、压缩等。在下一篇文章中将介绍计算层以及 DBMS 整体架构设计。

阅读全文 »

Let's Encrypt 免费的通配符域名证书

发表于 2018-03-15 | 更新于 2021-10-31 |

免费 SSL 证书提供商 Let's Encrypt 去年承诺的 ACME v2 以及通配符证书(Wildcard Certificate)终于在 3 月 14 日正式发布了。ACME 全称“自动化证书管理环境”,用于自动验证域名所有权并颁发 SSL 证书;本次发布的新版 ACME v2 添加了通配符证书的支持,再也不用每次添加子域名都重新申请证书。

ACME v2 目前只有一种方案支持通配符证书的验证—— DNS-01 challenge,即:通过向域名添加一条 TXT 记录来证明用户对域名的所有权。一般只要提供了 Token 访问的 DNS 服务商都可以支持,例如 GoDaddy、CloudFlare、DNSPod 等。

阅读全文 »
123…10
Eric Fu

Eric Fu

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