Mr Dk.
Mr Dk.
## 一些产品功能 1. 允许已有的 ByteNDB 无缝升级 2. 支持多个 OLTP 数据库同步到同一个 OLAP 引擎,实现跨库分析 3. 高效的数据迁移 4. OLAP 引擎加强
# 1. Introduction 当数据量较大时,分区是一个不错的选择。现代数据库系统通常在不同的节点上存储或处理分区数据,从而获得并行。在一台机器上,分区数据可以按行水平划分,也可以按列垂直划分,从而减少查询时需要扫描的数据。 对于查询来说,优化器需要根据查询条件决定是否只扫描一部分分区,这被称为 **静态分区消除**。由于现在数据使用星型模式,静态分区消除不一定总是可以成功。有一些分区消除只能在运行时才能够被决定,这被称为 **动态分区消除技术** - 大部分数据库要么不支持,要么支持得很差。另外还有无法在优化时确定分区键的场景,比如 prepared statement。 上述交代了问题。那么本文的贡献有: - 处理分区表的一个模型: - 两个抽象算子:`PartitionSelector` 和 `DynamicScan` - 产生的查询计划大小与总分区数或需要扫描的分区数无关 - 以统一的形式支持静态和动态的分区消除 - 方法与分区表的具体存储方式无关 - 分区消除算法,在查询计划的所有可以的位置放置 `PartitionSelector` 算子 - 多级分区表支持...
# 2. Optimizing Queries on Partitioned Tables ## 2.2 Query Model for Partitioned Tables 为了实现分区表扫描,引入了两个新的算子 *PartitionSelector* 和 *DynamicScan*。这两个运算符成对出现,被实现为 *生产者-消费者* 模式。*PartitionSelector* 计算需要扫描的分区的 OID,而 *DynamicScan* 根据这些 OID 进行扫描。两者通过共享内存进行通信。  如图,分区表的扫描有很多种模式: 1. 全分区扫描:PartitionSelector...
# 3. Implementation ## 3.1 Query Optimization MPP 系统中有多种数据分布模式: - Hash 分布 - Replicated 分布 - Singleton 分布 通过 Motion 算子来作为进程的执行边界。由于分区选择依赖于共享内存实现 PartitionSelector 和 DynamicScan 之间的通信,因此优化器需要保证一对 PartitionSelector 和 DynamicScan 算子在同一个进程内被执行,这意味着两者之间到公共祖先之间不能有 Motion...
## Abstract and Introduction Cache Fusion 是 Oracle RAC (Real Application Cluster) 的基本组件,能够将单机数据库系统扩展为 share-disk 的多节点集群。Cache Fusion 能够使节点之间通过网络互联发送消息共享易失 buffer,从而减少磁盘 I/O。 所谓 shared-disk 架构,是指所有节点能够直接访问所有磁盘的架构。核心组件: - 服务器节点 - 网络连接 - 磁盘子系统 Oracle RAC...
## Overview of Real Application Clusters 一个 Oracler 实例:能够访问共享的数据文件集合的进程和内存的集合。RAC 集群内的每个实例都有自己 **私有** 的 redo 日志和 **私有** 的 buffer pool,所有节点的私有 buffer pool 共同组成了全局的 buffer pool。  为了维护全局 buffer pool 的数据相干性,需要被称为 GCS (Global...
## 3. Cache Fusion Cache Fusion 指的是通过快速的网络传输在实例之间共享 buffer cache,从而形成一个集群视角的全局 buffer cache 的协议。分为两部分: - Read-Sharing:查询另一个实例上的 buffer 的机制 - Write-Sharing:更新另一个实例上的 buffer 的机制 ### Cache Fusion Read-Sharing 这里利用到了 Oracle 的 CR (Consistent Read)...
## RAC support for DSS workloads Oracle 使用基于集群的代价估算优化器,将负载放到集群上并行执行。考虑了: - 集群拓扑 - 节点数量、节点 CPU - 本地与远程执行的相对代价 一个减少远程执行代价的方法是使用 Function Shipping,将生成的 SQL 发送到远程去执行,这比 Data Shipping 会有更小的代价,因为网络传输的信息量变少了。
## Recovery in a RAC environment RAC 架构下,只要有一个节点存活就可以保证集群的可用性。恢复的代价和故障节点的数量相关,而不与集群大小相关。因为只有故障节点的 redo log 需要被读取并 apply。 并行恢复机制利用所有存活节点并行恢复,能够在多个实例上并行化地读取 log 和 data block,减少恢复时间。
为了实现 HTAP,隔离处理 OLTP 和 OLAP 使其不互相干扰是一个比较好的思路。为了实现不互相干扰,很直接的想法就是 **维护两份数据副本**。然而,维护两份数据又需要考虑数据一致性和新鲜度的问题。 TiDB 把数据按照范围打散到行式存储 TiKV 上,存储每个数据范围的所有 TiKV 组成一个 Raft 组,由一个 Leader TiKV 和一堆 Follower TiKV 组成。此外,TiDB 扩展了 Raft 协议,引入了 Learner 角色的 TiFlash 列式存储。TiFlash 与 Leader...