CMU Database Systems - Distributed OLTP & OLAP
OLTP
scale-up和scale-out
scale-up会有上限,无法不断up,而且相对而言,up升级会比较麻烦,所以大数据,云计算需要scale-out
scale-out,就是分布式数据库,刚开始肯定是Shared Nothing,但是分布式也引入了更高的架构复杂度和维护成本
所以现在的趋势,是架构分层,层之间是逻辑的scale-up,层内部是物理的scale-out
最终sharing-everything,其实在架构上又回到了scale-up
所以随着硬件的进步和技术的演进,架构上没有绝对的好坏

Shared Nothing是最常见的,也是最开始的分布式方案

共享磁盘,代表是Amazon的Aurora
执行层和存储层分离,那么当前在数据库层就不需要管副本同步的问题,主挂了,备拉起看到的数据还是一样的,在数据库层只有一份磁盘数据

共享内存,共享磁盘虽然解决大部分数据同步的问题,但是执行层仍然是有状态的,因为内存中的状态,并没有落盘,所以failover后仍然需要状态恢复
如果共享内存,那么执行层就可以完全无状态,那样维护成本会大幅降低
但是很明显,共享内存很难实现,稳定性和性能的要求会很高,现在没有数据库实现共享内存

早期的分布式数据库,

分布式数据库设计需要考虑一些架构上的问题,
同构还是异构,Mongo是典型的异构架构


数据Partition,既然是分布式数据库,数据肯定是要分开放的,怎么分?

可以按照Table分,明显这样扩展性不太好,如果Table太大会有问题
比较自然的方式,是水平划分,如右图


Partition还分为,逻辑的和物理的,如果是逻辑的,只是扩展数据库处理能力


中心化,还是去中心化

中心化实现简单,但是单点问题,扩展和failover,典型代表,Bigtable
非中心化,实现复杂,一致性很难保证,更优雅


分布式一致性,是分布式数据库中最困难的问题
可以看到简单的分布式2PL很容易造成死锁


分布式一致性的常用方法如下,

2PL分为两个阶段,准备和提交;2PL的最大问题就是活性,任意一个节点挂都会导致失败

Early acknowledgement,Prepare都成功后,直接给client返回成功,不用等commit阶段结束


Paxos,简单的理解为,majority版本的2PL


副本机制用于解决单点问题,所以多存几份
副本最大的问题就是同步问题

主备或多主,两种情况


副本间同步策略,
同步,主备都是落盘
异步,主落盘
半异步,主落盘,备收到数据,未落盘




持续同步,或是commit的时候同步
基本都采用持续同步

Active,主进程主动同时写多个副本
Passive,主进程只写主副本,其他需要同步进程进行被动同步

CAP理论 ,3选二

一致性,一旦commit,从每个副本上读到的数据是一样的
可用性,挂掉一个副本仍然可读写
分区容错,分区间失联(可能是挂了,也有可能是由于网络导致脑裂),那么这种情况下需要选择,
选可用性,如下图,你可以脑裂的情况下,继续写,但是数据就不一致了
选一致性,根据不同的策略,判断是否可写,比如传统2PC只能等,Paxos要求多数可写



OLAP
传统OLAP是个数仓概念,
通过ETL把TP中的数据同步到数仓

数据的存储结构,主要分为两种,
星型和雪花型


Star,只有一层维表,而雪花会有多层维表
维表少,说明非范式化,那么查询比较简单,一层join;但是存储空间比较大,而且修改比较麻烦,但是对于AP这不是大问题

Agenda

Execution Models
分成,push,pull
现在其实能push都是尽量push的,哪怕不能整条push,也会部分谓词,Join push down
这样再pull上必须的数据进行后续计算
降低计算节点的压力,也降低数据的网络传输量



对于分布式AP,查询计划也需要打散,两种方式
一种是算子方式,大部分系统都是这么设计的
另一种是Sql的方式,一般中间件会采用这样的方式


以Sql为形式打散的例子,

分布式Join算法

1. 小表广播
2. join key等于分区key
3. 把原先没有广播的小表,进行广播
4. 全shuffle




云数据库


数据库是否可以用通用格式存储,这样便于数据共享


CMU Database Systems - Distributed OLTP & OLAP的更多相关文章
- CMU Database Systems - Storage and BufferPool
Database Storage 存储分为volatile和non-volatile,越快的越贵越小 那么所以要解决的第一个问题就是,如果尽量在有限的成本下,让读写更快些 意思就是,尽量读写volat ...
- CMU Database Systems - Database Recovery
数据库数据丢失的典型场景如下, 数据commit后,还没有来得及flush到disk,这时候crash就会丢失数据 当然这只是fail的一种情况,DataBase Recovery要讨论的是,在各种f ...
- CMU Database Systems - Timestamp Ordering Concurrency Control
2PL是悲观锁,Pessimistic,这章讲乐观锁,Optimistic,单机的,非分布式的 Timestamp Ordering,以时间为序,这个是非常自然的想法,按每个transaction的时 ...
- CMU Database Systems - Concurrency Control Theory
并发控制是数据库理论里面最难的课题之一 并发控制首先了解一下事务,transaction 定义如下, 其实transaction关键是,要满足ACID属性, 左边的正式的定义,由于的intuitive ...
- CMU Database Systems - Parallel Execution
并发执行,主要为了增大吞吐,降低延迟,提高数据库的可用性 先区分一组概念,parallel和distributed的区别 总的来说,parallel是指在物理上很近的节点,比如本机的多个线程或进程,不 ...
- CMU Database Systems - Query Optimization
查询优化应该是数据库领域最难的topic 当前查询优化,主要有两种思路, Rules-based,基于先验知识,用if-else把优化逻辑写死 Cost-based,试图去评估各个查询计划的cost, ...
- CMU Database Systems - Two-phase Locking
首先锁是用来做互斥的,解决并发执行时的数据不一致问题 如图会导致,不可重复读 如果这里用lock就可以解决,数据库里面有个LockManager来作为master,负责锁的记录和授权 数据库里面的基本 ...
- CMU Database Systems - MVCC
MVCC是一种用空间来换取更高的并发度的技术 对同一个对象不去update,而且记录下每一次的不同版本的值 存在不会消失,新值并不能抹杀原先的存在 所以update操作并不是对世界的真实反映,这是一种 ...
- CMU Database Systems - Embedded Database Logic
正常应用和数据库交互的过程是这样的, 其实我们也可以把部分应用逻辑放到DB端去执行,来提升效率 User-defined Function Stored Procedures Triggers Cha ...
随机推荐
- VS调试 DataTable (转载)
调试的时候遇到一个问题:不知道怎么在自动窗口或者添加监视那里查看DataSet或者DataTable的具体的值.度娘了一下很多都是添加DataTable.Rows[][]监视,但是一行一列地看还是有点 ...
- java实现mysql数据备份
/** * @param hostIP ip地址,可以是本机也可以是远程 * @param userName 数据库的用户名 * @param password 数据库的密码 * @param sav ...
- SQL与NoSQL区别--商业SQL数据库衰落--oracle面临困境
转自:商用数据库之死:Oracle 面临困境 这二十年来,商业数据库市场仍然是 IT 行业最稳定.最具黏性的领域之一,Oracle.IBM 和微软三家厂商瓜分了 80% 的份额.然而,我们认为这个领域 ...
- PAT甲级1012题解——选择一种合适数据存储方式能使题目变得更简单
题目分析: 本题的算法并不复杂,主要是要搞清楚数据的存储方式(选择一种合适的方式存储每个学生的四个成绩很重要)这里由于N的范围为10^6,故选择结构体来存放对应下标为学生的id(N只有2000的范围, ...
- Improving Sequential Recommendation with Knowledge-Enhanced Memory Networks(知识图谱)
本文作者:杨昆霖,2015级本科生,目前研究方向为知识图谱,推荐系统,来自中国人民大学大数据管理与分析方法研究北京市重点实验室. 引言 经常上购物网站时,注意力会被首页上的推荐吸引过去,往往本来只想买 ...
- win10下无法安装loadrunner,提示“管理员已阻止你运行此应用”
如下图: 1.再次进入控制面板,并且选择用户账户后把最下面的[更改用户账户控制设置],里面有个滑条,把滑条拉到最下面的[从不通知]上面并且确定. 2.按[Win+R]快捷键打开运行,输入 gpedit ...
- [POJ2083] Fracal
Description A fractal is an object or quantity that displays self-similarity, in a somewhat technica ...
- Celery + Redis 的探究
Celery + Redis 的探究 文本尝试研究,使用 redis 作为 celery 的 broker 时,celery 的交互操作同 redis 中数据记录的关联关系. 不在乎过程的,可以直接看 ...
- Collections.synchronizedList与CopyOnWriteArrayList比较
1.单线程方式 2.多线程版本,不安全的 ArrayList 3.多线程版本,线程安全,CopyOnWriteArrayList()方式 4.多线程版本,线程安全,Collections.synchr ...
- CentOS yum repo
CentOS yum repo 阿里云的 一个是Centos-6的 一个是Centos-7 # CentOS 5 wget -O /etc/yum.repos.d/CentOS-Base.rep ...