xsimd

简介 xsimd是由c++语言编写的,支持跨平台,跨CPU架构的向量化计算库。它封装了CPU提供的simd向量化计算函数,屏蔽了底层细节,使得用户很方便的使用simd特性,提升计算性能。 Define 语句 c++的d……

Gluten Columnar 数据格式

向量化计算需要数据是列式存储格式的。gluten作为spark和本地向量化引擎的连接层,实现了列式存储数据的交互和转换。下面会先介绍spark的列式存储原理,然后介绍了本地向量化层的列式存储,最后两者……

Gluten 本地库加载原理

简介 gluten以来底层的向量化计算引擎,向量化计算需要依赖操作系统的底层指令,所以这些引擎都是c++开发的。gluten通过jni方法加载和调用c++程序,这些c++都是封装成library格式的,……

Apache Orc 结构

前言 最近看完了数据库的行式存储后,也想总结下列式存储。列式存储也有多种实现方式,这里挑选熟悉的存储格式 orc,它在hive里使用的比较多。本篇会先讲讲它的设计结构,然后结合源码来理解,中间还会讲述一些……

Apache Orc 压缩原理

前言 orc 作为列式存储,其特点之一就是极高的数据压缩比,这篇文章就来讲讲它的压缩原理。 数据类型 orc 对于每种不同的数据类型,对应着不同的压缩方式。比如 string类型压缩,int 类型压缩,字节类型压缩。下面会……

Postgresql 动态哈希表实现

结构图 hash 表包含了多个 segment 切片,每个 segment 包含了相同数量的 bucket。里面的 bucket 使用链表存储着 hash 值相同的元素。 当查找指定的 key 时,首先计算出它的哈希值,然后根据后面的几位数,计算出对应的 bucket 位置。之后遍历 bucket 的元素……

postgresql 缓存池并发设计

前言 postgresql 对于缓存池的并发控制,比较复杂。下面通过一步步的优化,来讲述 postgresql 的设计思路。它为了提升锁的性能,大量使用了 CAS 操作,只有在操作比较慢的时候,才会加入读写锁。在继续阅读之前,需要熟悉它的存储设计,可以……

Postgresql 存储设计

架构图 用户查询指定 page 的数据 首先查询该 page 是否在缓存中,通过 hash table 快速查找它在缓存池的位置 如果存在,那么从缓存池读取返回 如果不存在需要从磁盘读取数据,并且放入到缓存池中,然后返回 postgresql 存储单位 postgresql 底层存储的数据交……

Postgresql Toast 原理

前言 上篇博客讲述了 postgresql 如何存储变长数据,它的应用主要是在 toast 。Toast 在存储大型数据时,会将它存储在单独的表中(称为 toast 表)。因为 postgresql 的 tuple(行数据)是存在在 Page 中的,Page 的大小默认为 8KB。pos……

Postgresql Varlena 结构

前言 postgresql 会有一些变长的数据类型,存储都是采用 varlena 格式的(除了 cstring 类型),通过语句 SELECT typname FROM pg_type WHERE typlen = -1就可以看到所有采用 varlena 格式的数据类型,比如常见的 text ,json 类型。 varlena 结构 varlena结构有一个通用的定义格式……