前言 postgresql 保存数据的基本单位是 page,一个 page 里包含多条数据。postgresql 同磁盘的读写单位也是 page,一个 page 对应于磁盘的一个 block。block 的格式和 page 是相同的,本篇文章详细得介绍了 page 的数据……
前言 postgresql 的表包含了多种类型的文件,其中 main 类型的文件存储实际的数据,以数据块的格式存储,称为 data block。一个 data block 包含了多条数据,当新建了一个data block 或者原有的数据被删除,那么这个 data block 就会有空闲位置,p……
前言 在 postgresql 数据库里,数据都会以表的形式组织起来。表的数据会被持久化到底层的磁盘里。负责与底层的磁盘交互,就是 postgresql 的文件存储层。本篇博客会依次介绍表的文件构成、分片机制和存储接口。 表的文件类型 postgresql 使用 RelFileNode 来标识……
前言 Zookeeper 作为分布式的一致框架,提供了原子性的写,而且好保证了高可用(集群有过半节点正常运行)。这些特点被广泛应用,比如 Hbase 用来存储配置信息,还用来保证主从切换。本篇文章介绍了 zookeeper 的核心算法 zab 协议,zab 协议……
前言 最近因为要了解 zookeeper 的原理,所以开始了学习分布式共识算法 paxos 。在网上可以搜到很多篇这方面的内容,但是网上的资料良莠不齐,导致学习起来比较曲折。本篇博客主要是总结了自己的学习成果,也可以供读者参考。pax……
前言 zookeeper 的原生客户端使用起来比较繁琐,一般生成环境很少使用。curator 在外面封装了一层,使用起来更加方便,并且还提供了常用的场景,比如 leader 选举,分布式锁,分布式队列。本篇博客会首先介绍 curator 的基本使用,然……
架构图 首先给出一张简单的架构图,初步的了解下流程。 客户端创建请求,将它放入到一个队列里。如果客户端采用了同步请求,那么它会等待响应。如果采用了异步请求,它会传递回调函数,立刻返回。 队列采用先进先出的方……
前言 Leveldb 是一个出色的 key-value 存储引擎,它的特点是支持高效的写,同时兼顾一定的读性能。本篇的内容比较零散,都是我在看 leveldb 源码时,觉得一些比较出彩的设计思想,值得学习参考,所以就总结一下。 队列方式处理请求 leveldb 支持多线……
前言 Spark 的 Executor 节点不仅负责数据的计算,还涉及到数据的管理。如果发生了 shuffle 操作,Executor 节点不仅需要生成 shuffle 数据,还需要负责处理读取请求。如果 一个 Executor 节点挂掉了,那么它也就无法处理 shuffle 的数据读取请求了,它之……
spark
3427
7 分钟
前言 Shuffle 操作在 Spark 中很常见,往往用于聚合或重新分区等场景。Shuffle 操作特别费时,会造成极大的磁盘 IO 和网络 IO,经常是整个任务的性能瓶颈。所以了解下 shuffle 的原理很重要,可以根据其原理进行调优。本篇介绍 shuffle 数……