阿里自研数据库 ocean base实践
TRANSCRIPT
苏真
2013.4
1
阿里自研数据库 Oceanase实践
课程大纲
Why OceanBase
系统架构
数据模型
如何使用
2
WHY OCEANBASE
了解 OceanBase 的特点
• 恋爱通常是从了解开始的,想用好OceanBase ,得先了解它。
• OceanBase 设计目标: 关系型数据库、结构化数据
分布式、扩展性
千亿级数据量
跨行跨表事务
支持 SQL 、兼容 MYSQL 协议
Why OceanBase
• 传统数据库 (mysql&oracle) ,功能完善,唯一缺点是数据库本身不可扩展,业务高速增长时需要不断折库折表、需要 TDDL 等中间层支持
OceanBase RDBMS + Scalability= 关系数据库: ACID & SQL
> 持续可用 + 水平扩展 + 低成本 + 高性能
< 功能 & 性能
数据库进化的时代到了
• mysql 和 oracle 为代表的传统数据库
• Nosql 很热:hbase , cassandra , mongodb 等遍地开发
• 大数据时代,数据库变革时期正在到来,谁将占据主流?
现有存储方案对照
7
数据规模
事务与数据一致性
万亿记录( 十 PB)
千亿记录( 百 TB)
千万记录( 百 GB)
十亿记录(TB)
最终一致 单行事务 跨行跨表事务
RDBMS
Cassandra
HBaseMegastore
OceanBase
Dynamo
Bigtable
不同数据库的对比数据库类型 代表 特点
关系型数据库 mysql,oracle 支持事务、数据一致性好、功能强大,成熟稳定。但扩展性不足
自主开发 OceanBase 支持事务、 SQL。功能上接近关系型数据库,兼顾扩展性
NoSQL类型 Cassandra、 Hbase
可扩展性好,功能单一;一般不支持事务、不支持表关联查询、数据一致性较弱、有些还没有范围查询
数据库选型
• 关于开源数据库 OceanBase( http://oceanbase.taobao.org/ ) 的应用场景:
如果你不需要事务 (transaction) , MongoDB 等是不错的选择;
如果你的数据量很大, HBase 也是不错的选择;
如果你需要事务 (transaction) ,并且数据量不大,或者你可以接受分库 (sharding) 后的事务,关系数据库 ( 例如 MySQL) 是不错的选择;
如果你需要事务 (transaction) ,并且数据量比较大 ( 例如 1TB~ 几百 TB) ,或者虽然目前数据量不大,但数据增长很快,你希望免除分库分表的麻烦,那么欢迎你选择OceanBase
参考如标题的等式: OceanBase = transactionality + scalability 9
10
系统架构
11
OceanBase 设计思路
数据存储:多机磁盘
修改增量:单机内存
Data = 基线数据
( 磁盘 )+ 修改增量
( 内存 )
Query
数据增删改
物理架构
12
App(Client)
ChunkServer/MergeServer
ChunkServer/MergeServer
ChunkServer/MergeServer
ChunkServer/MergeServer
RootServer/ UpdateServer
(primary)
RootServer/ UpdateServer(secondary)
RootServer/ UpdateServer
(read secondary)
meta data
increment data
base data
data merge
13
每日合并:修改增量
很多数据库每天有明显的访问低谷 (e.g.,2:00am-5:00am)
Data = 基线数据 + 修改增量 新的修
改增量+
读写事务照常进行
14
OceanBase 系统架构
使用 MySQL 客户端,兼容 MySQL 应用
UpdateServer
MergeServerChunkServer
MergeServerChunkServer
MergeServerChunkServer
MergeServerChunkServer
MergeServerChunkServer
MergeServerChunkServer
修改增量
应用接口
基线数据
SQL
SQL
SQL
SQL
SQL
SQL
SQL
SQL
RootServer
配置管理
15
OceanBase 读写事务
UpdateServer
MergeServerChunkServer
MergeServerChunkServer
MergeServerChunkServer
MergeServerChunkServer
MergeServerChunkServer
MergeServerChunkServer
修改增量
应用接口
基线数据
SQL
SQL
SQL
SQL
SQL
SQL
SQL
SQL
写事务 (UpdateServer) : Redo log + 主备同步
RootServer
配置管理
16
每日合并期间的 query
使用新或旧基线数据,查询结果一样
Data = 基线数据 + 修改增量 新的修
改增量+
Query
旧基线= + 旧增量 + 新增量
Query
新基线= + 新增量
水平扩展 -CS/MS
新增服务器:数据自动迁移且对应用透明
应用不再需要分库分表
应用不再需要耗费时间配合数据库进行扩容
33
3
4
4
4
5
5
5
6
6
6
7
77
8
8
8
0
0
0
2
2 2
1
1
1
服务器
水平扩展 -UPS 备 UPS 线性扩展
RootServer
UpdateServer
MergeServerChunkServer
MergeServerChunkServer
MergeServerChunkServer
MergeServerChunkServer
MergeServerChunkServer
MergeServerChunkServer
修改增量
应用接口
基线数据
RootServerHA
UpdateServer
UpdateServer
UpdateServer
UpdateServer
RootServer
配置管理
跨机房容灾在二个机房部署主备二个群集,群集之间通过
updateserver 的 commitlog 实现自动同步
Update
Server
MergeServer
ChunkServer
MergeServer
ChunkServer
MergeServer
ChunkServer
MergeServer
ChunkServer
MergeServer
ChunkServer
MergeServer
ChunkServer
Update
Server
MergeServer
ChunkServer
MergeServer
ChunkServer
MergeServer
ChunkServer
MergeServer
ChunkServer
MergeServer
ChunkServer
MergeServer
ChunkServer
RootServer
RootServer
持续可用: RS/UPS RS/UPS 异常,数据不丢,
服务不停
RootServer
UpdateServer
MergeServerChunkServer
MergeServerChunkServer
MergeServerChunkServer
MergeServerChunkServer
MergeServerChunkServer
MergeServerChunkServer
修改增量
应用接口
基线数据
RootServerHA
UpdateServer
UpdateServer
UpdateServer
UpdateServer
RootServer
配置管理
持续可用: CS
CS 异常,数据不丢,服务不停
33
3
4
4
4
5
5
5
6
6
6
7
77
8
8
8
0
0
0
2
2 2
1
1
1
基线数据服 务 器(CS)
持续可用: MS
UpdateServer
MergeServerChunkServer
MergeServerChunkServer
MergeServerChunkServer
MergeServerChunkServer
MergeServerChunkServer
MergeServerChunkServer
SQL
SQL
SQL
SQL
SQL
SQL
SQL
SQL
RootServer
MS 异常,数据不丢,服务不停
持续可用 - 跨数据中心
IDC 异常,数据不丢,服务不停
Update
Server
MergeServer
ChunkServer
MergeServer
ChunkServer
MergeServer
ChunkServer
MergeServer
ChunkServer
MergeServer
ChunkServer
MergeServer
ChunkServer
Update
Server
MergeServer
ChunkServer
MergeServer
ChunkServer
MergeServer
ChunkServer
MergeServer
ChunkServer
MergeServer
ChunkServer
MergeServer
ChunkServer
SQL
SQL
SQL
SQL
SQL
SQL
SQL
SQL
RootServer
RootServer
持续可用 - 数据校验
磁盘读写:每条记录带 64 位 checksum
网络传输:每个网络包带 64 位 checksum
每个文件多副本 (3~6) :每个文件都有 64 位 checksum
修改增量多副本 (2~N) :每个 UPS 内存数据都有 64 位 checksum
Redo log :每条都带 checksum及对应于 UPS 内存的 checksum
持续可用 -小结 假设:硬件、软件、人随时可能故障或犯错
OceanBase 目标:用不可靠的硬件和软件提供稳定、持续可用的服务 年可用率 99.999+%( 计划内停机属于不可用 )
措施
配置服务 (RS) : HA
更新增量服务 (UPS) :实时热备
基线数据服务 (CS) :数据多副本
应用接口 (MS) :多实例
跨机房数据同步
数据正确性:记录 / 网络包、文件和内存 checksum
26
数据模型
数据模型TABLE
sstable
sstable
sstable
chunkserver1
chunkserver2
chunkserver3
chunkserver4
chunkserver5
chunkserver6
sstable
sstable
sstable
数据模型
Primary Key field1 field2 field3 … fieldn
Primary Key: 用于定位记录的唯一标识, 不可以重复 数据物理存储按 Primary Key 排序
Field( 字段 ): 类型: int , double, varchar, datetime,timestamp, create_time, modify_time.
表,记录,字段,数据类型。数据模型与传统 RDBMS 一样
记录构成:
基准数据和增量数据
Oceanbase 数据结构 增量数据:单机 B+ 树
基准数据:分布式 B+ 树
新的基准数据 = 老的基准数据 + 增量数据
29
基线数据(Chunkserver)
增量数据(Updateserver)
数据分布
30
Updateserver
Chunkserver 4Chunkserver 3Chunkserver 2Chunkserver 1
Rootserver
数据分片(元数据)
增量数据( B+树)
31
如何使用
完全兼容 mysql 客户端
32
实例
33
Create table t1( c1 int, c2 int, c3 varchar(20), c4 datatime, c5 int, c6 createtime, primary key (c1,c2,c3))
C1+C2+C3 组成主键, C4,C5,C6 为普通字段C1 C2 C3 C4 C5 C6
实例
34
C1+C2+C3 组成主键, C4,C5,C6 为普通字段
OKSelect * from t1 where c1=x and c2 =x and c3=‘xxxx’;Select * from t1 where c1=x and c2=x;Select * from t1 where c1=x;Select * from t1 where c1=x and c2=x and c4=x;Select * from t1 where c1=x and c6=x;Select sum(c5) where c1=x;
C1 C2 C3 C4 C5 C6
实例
35
C1+C2+C3 组成主键, C4,C5,C6 为普通字段
NOT OKSelect * from t1 where c2=x and c3 =‘xxxx’;Select * from t1 where c3=‘xxxx’;Select * from t1 where c2=x;Select * from t1 where c5=x ;
更多 OceanBase SQL 手册参见:http://oceanbase.alibaba-inc.com/wiki/index.php?title=SQL_User_manual
C1 C2 C3 C4 C5 C6
Select,update,replace,delete,insertwhere 条件过滤 (and, or) likegroup byhavingorder by limit,offset reverse scanaggregate(count,sum,average)
支持的 SQL操作
OceanBase 应用接口
应用接口: MySQL 兼容 (JDBC/ODBC)
APP
OceanBase
OBSQL 客户端库
MySQL客户端库
PRELOAD