Blog Website

Learn modern C++ techniques in ClickHouse

0. 前言

从 C++11 开始的现代 C++ 是 C++ 编程语言的一次重大变革,在维持稳定性的情况下,从易用性、安全性、效率等各个方面增加了许多现代编程语言的特性。自 C++11 问世以来,受到了 C++ 开发者的广泛青睐,大量 C++ 项目都转向现代 C++ 或使用现代 C++ 进行开发,其中就包括 ClickHouse

ClickHouse 是一款优秀的开源 OLAP 数据库,其出现可以算得上是划时代的产品,工程实现亦可以称为业内标杆,精巧的向量化引擎设计与实现受到业内的广泛青睐和借鉴,引领了实时 OLAP 领域的一波浪潮。

本文会以 ClickHouse 代码为例,谈一谈其中使用到的一些常见现代 C++ 特性。然而,从 C++11 开始的现代 C++ 与之前版本的 C++ 相比,几乎可以算是一门新的语言,其包含太多新的语言特性和功能,因此本文不会详细罗列介绍现代 C++ 特性。

Read More

AST-based Query Fuzzer in ClickHouse

在软件开发中,测试是保证系统/程序能够正确、可靠、稳定运行的重要途径,并且是一项永无止境的工作。

对于数据库来说,其需要对输入的 SQL 查询语言进行解释执行,从而对持久化存储的数据进行计算和处理,并且执行过程通常是分布式的。对于上述每一项功能的正确性测试,都非常困难,而当三者结合到一块时,情况则更加复杂。

Read More

Large Scale Graph Analysis Systems

背景

大规模图数据分析是当前的一大研究热点。随着大数据时代的到来,在人们日常生活中、工业界和学术界产生的数据越来越复杂,传统的关系型数据模型和欧几里得数据模型难以用来描述和建模许多具有复杂关系的实体和对象,而图结构模型则恰好能够弥补这一弊端。

Read More

Introduction to LLVM Pass and APA

LLVM Pass

Pass 是 LLVM 中一个非常重要的框架,在 LLVM 后端的分析、转化、优化等过程中,通常是多个 Pass 一起作用来共同完成的。

每一个 LLVM Pass 都是 Pass 类的一个派生类,通过重写 Pass 类的虚方法来实现自身的功能。根据你想要实现的功能,你可以选择继承ModulePassFunctionPass 等等一系列Pass.

Read More