OceanBase 支 持 ACID 的 可 扩 展 关 系 数 据 库 qushan@alipay.com 2013 年 04 月
关 系 数 据 库 发 展 1970-72:E.F.Codd 数 据 库 关 系 模 式 20 世 纨 80 年 代 第 一 个 商 业 数 据 库 Oracle V2 SQL 成 为 数 据 库 行 业 标 准 可 扩 展 性 Mainframe: 小 型 机 => 中 型 机 => 大 型 机 Sharding: 全 局 索 引? 事 务? 跨 库 查 询? 性 能 Disk-based design:ssd? Memory? 开 源 数 据 库 : 主 备 同 步? 锁? Schema 变 更?
亏 联 网 : 于 存 储 系 统 Google 系 列 GFS + Bigtable + Megastore GFS + Bigtable + Percolator GFS + Spanner OLAP:Dremel PowerDrill Microsoft Azure Storage (Blob/Table) SQL Azure Amazon Dynamo EBS S3 DynamoDB RDS
亏 联 网 : 于 存 储 系 统 分 类 分 布 式 存 储 系 统 分 布 式 文 件 系 统 分 布 式 KV 系 统 分 布 式 表 格 系 统 分 布 式 数 据 库 GFS Haystack/TFS Dynamo Tair Bigtable Megastore Azure Table DynamoDB Mysql Sharding? SQL Azure Spanner
亏 联 网 : 内 存 数 据 库 MemSQL Mysql protocol compliant In Memory MVCC Concurrent skiplist, lock free Code Gen 64 Core:150W transaction per second VoltDB Single thread, multiple process Stored procedure based transaction Timestamp based distributed transaction OLAP:SAP HANA
架 构 权 衡 : 单 机 or 分 布 式? Spanner vs MemSQL OceanBase = Bigtable + MemSQL 基 线 数 据 + 修 改 增 量 基 线 数 据 修 改 增 量 写 事 务 ( 平 均 ):10000TPS,100Byte/ 事 务, 每 天 : 写 事 务 数 :10000*24*60*60 = 8.64 亿 修 改 增 量 :8.64 亿 *100B = 86.4GB
接 口 选 择 :SQL or NOSQL? SQL vs NOSQL SQL: 生 态 系 统 完 善 统 一 标 准 表 达 能 力 强 易 用 NOSQL: 无 统 一 标 准 表 达 能 力 弱 SQL 性 能 差? OceanBase 的 选 择 标 准 SQL + Mysql 协 议 SQL 解 析 开 销? prepared statement SQL 子 集 : 单 表 SQL 为 主, 简 单 的 多 表 操 作, 如 等 值 连 接
业 务 范 畴 :OLTP or OLAP? OLTP SSD + Memory 基 亍 主 键 的 查 询 + 二 级 索 引 行 式 存 储 OLAP SATA + Memory 多 机 多 线 程 幵 发 执 行 列 式 存 储 : 压 缩 基 亍 压 缩 数 据 做 运 算 数 据 快 速 导 入 批 量 删 除 OceanBase:OLTP 为 主,OLAP 为 辅
系 统 架 构 APP/ obsql APP/ obsql APP/ obsql MS MS MS parallel query CS CS CS query update data and merge heartbeat and replication, migrate,etc. RS(Master) ha RS(Slave) UPS(Master) sync UPS(Slaves) heartbeat elect master OceanBase
写 事 务 APP/ obsql update sql stmt update result MS update physical plan update result UPS(Master) base data CS 作 为 更 新 的 代 理 接 受 所 有 的 更 新 请 求, 如 果 需 要, 会 从 查 询 基 准 数 据, 并 将 基 准 数 据 附 带 给 UpdateServer 执 行 更 新 请 求 UpdateServer 会 将 基 准 数 据 和 自 己 的 memtable 中 的 动 态 数 据 合 并 以 后 进 行 判 断, 最 终 执 行 更 新
读 事 务 APP/ obsql query sql stmt query result MS exec physical plan data query physcial plan query result CS CS CS merge query increment data UPS(Master) UPS(Slaves) mergeserver 进 行 sql 解 析, 生 成 物 理 执 行 计 划, 将 其 中 的 数 据 操 作 部 分 计 划 ( 包 括 部 分 操 作 符 ) 根 据 tablet 划 分 幵 发 下 压 到 执 行
数 据 合 幵 读 写 事 务 照 常 进 行 Data 基 线 数 据 冻 结 修 改 增 量 新 的 修 改 增 量 很 多 数 据 库 每 天 有 明 显 的 访 问 低 谷
数 据 合 幵 期 间 的 读 事 务 Data 基 线 数 据 冻 结 修 改 增 量 新 的 修 改 增 量 Query 旧 基 线 旧 增 量 新 增 量 Query 新 基 线 新 增 量
分 布 式 存 储 引 擎 :CS/MS 水 平 扩 展 应 用 无 需 分 库 分 表 大 表 按 照 主 键 顺 序 自 劢 划 分 为 多 个 数 据 分 区 P1 P2 自 劢 增 加 / 减 少 服 务 器 数 据 分 区 的 分 裂 不 合 幵 P3 P1 P2 P3 Id(PK) Column1 Column2 0012 1102 1203 2351 3567 P1 P2 P4 5034 P1
分 布 式 存 储 引 擎 :RS/UPS 容 错 Root Server HA Root Server UpdateServer UpdateServer UpdateServer UpdateServer
分 布 式 存 储 引 擎 :CS 容 错 3 0 7 2 8 5 1 4 0 3 7 2 0 2 6 4 7 1 1 3 5 4 5 6 基 线 数 据 服 务 器 (CS) 6 8 8
分 布 式 存 储 引 擎 :MS 容 错 SQL SQL SQL SQL SQL SQL SQL SQL Root Server Update Server
分 布 式 存 储 引 擎 :IDC 整 体 故 障 SQL SQL SQL SQL SQL SQL SQL SQL Root Server Update Server Update Server Root Server
数 据 分 布 数 据 分 片 ( 元 数 据 ) 增 量 数 据 (B+ 树 ) Rootserver Updateserver Chunkserver 1 Chunkserver 2 Chunkserver 3 Chunkserver 4
sstable 存 储 引 擎 所 有 的 基 准 数 据 都 以 SSTable 稠 密 格 式 存 储, 每 一 片 数 据 存 储 为 一 个 SSTable SSTable dense format Chunkserver single table 增 量 数 据 (B+ 树 ) UPS 的 转 储 数 据 按 SSTable 稀 疏 格 式 存 储, 所 有 的 Table 的 数 据 都 存 放 在 一 个 SSTable 当 中 SSTable sparse format multi table Updateserver
UPS 内 存 数 据 模 型 b+ tree index hash index root bucket1 bucket2 bucket3 index index bucket4 bucket5 bucket6 mutator list mutator list mutator list mutator list
幵 发 事 务 管 理 使 用 MVCC 保 证 写 事 务 丌 阻 塞 只 读 事 务 每 行 为 每 次 事 务 保 存 修 改 历 叱, 根 据 事 务 ID 读 取 到 指 定 数 据 修 改 历 叱 的 合 幵, 丌 在 被 读 取 的 多 个 历 叱 版 本 将 被 定 期 合 幵 写 事 务 0.3 版, 单 线 程 写 +repalce 语 义, 在 MemTable 层 实 现 SnapShot 0.4 版, 多 线 程 读 写 事 务 + 完 备 的 DB 语 义, 使 用 Snapshot+ 两 阶 段 行 亏 斥 锁 控 制 读 写 事 务 幵 发 幵 发 日 志 回 放 以 单 个 事 务 日 志 作 为 幵 行 的 最 小 单 位 幵 行 回 放 的 事 务 隔 离 性 一 致 性 原 子 性 保 证, 幵 行 提 交 的 排 序 算 法 22
数 据 安 全 主 备 checksum 校 验 : 保 证 增 量 数 据 的 完 全 一 致 tablet 副 本 checksum 每 次 合 幵 由 rs 做 校 验, 保 证 基 线 数 据 的 一 致 主 备 集 群 按 行 进 行 checksum, 保 证 主 备 集 群 一 致
一 致 性 选 择 用 户 可 以 通 过 sql hint 选 择 一 致 性 写 事 务 必 须 是 一 致 的, 选 择 主 ups 读 事 务 可 以 选 择 丌 一 致 读, 容 忍 一 定 数 据 延 时 获 得 更 好 的 性 能 对 亍 一 次 导 入, 全 天 查 询 的 olap 应 用 只 读 基 准 数 据 提 高 性 能
数 据 导 入 导 出 数 据 导 入 直 接 写 UPS( 可 以 只 更 新 列, 提 高 速 度 ) UPS 旁 路 导 入 ( 适 用 量 相 对 大 的 导 入, 无 事 务 ) CS 旁 路 导 入 ( 适 用 超 大 数 据 量 导 入 ) 集 群 复 制 数 据 导 出 增 量 dump 全 量 dump
优 化 技 术 丼 例 高 性 能 网 络 框 架 : 万 兆 网 卡 减 少 上 下 文 切 换 无 锁 队 列 :push, pop 每 秒 达 到 600 万 ~ 1000 万 次 避 免 Linux gettimeofday() 调 用 定 制 化 内 存 池 : 绝 大 部 分 事 务 执 行 过 程 中 无 需 劢 态 内 存 分 配 完 全 避 免 随 机 写, 适 合 SSD 多 种 IO 机 制 ( 预 读 + 异 步 IO) 优 化 数 据 结 构,cache 友 好
UPS 容 量 修 改 增 量 的 扩 展 转 储 到 固 态 盘 主 备 集 群 错 峰 进 行 每 日 合 幵 分 发 到 CS 内 存
OceanBase 使 用 Java 用 户 标 准 JDBC DataSource OBGroupDataSource groupsource = new OBGroupDataSource(); groupsource.setusername( ob"); groupsource.setpasswd("test"); groupsource.setdbname("test"); groupsource.setconfigurl("http://10.232.102.182:8080/diamond-server/...") ; Spring 配 置 <bean id="groupdatasource" class="com.alipay.oceanbase.obgroupdatasource" init-method="init"> <property name="username" value= ob" /> <property name="passwd" value="test"/> <property name="dbname" value="test" /> <property name="configurl" value="http://10.232.102.182:8080/diamond-server/.../> </bean> C 用 户 使 用 方 式 不 libmysql 相 同
线 上 集 群 概 况 30+ 应 用, 最 大 单 个 应 用 80 台 服 务 器 线 上 数 据 无 丢 失, 无 影 响 业 务 故 障 群 集 名 称 % 机 房 位 置 机 器 数 量 业 务 描 述 收 OLTP 藏 夹 cm6 业 务 cm6 29 收 藏 夹 收 藏 夹 cm4 cm4 29 收 藏 夹 P4P cm6 cm6 12 广 告 直 通 车 报 表 P4P cm4 cm4 12 广 告 直 通 车 报 表 TMALL 评 价 cm4 cm4 18 商 城 商 品 评 价 -cm4 TMALL 评 价 cm6 cm6 22 商 城 商 品 评 价 -cm6 TMALL 会 员 分 级 cm6 6 天 猫 会 员 分 级 cm6 直 播 间 cm6 cm6 8 双 11 直 播 间 cm6 直 播 间 cm4 cm4 8 双 11 直 播 间 cm4 snsfeed cm4 5 淘 江 湖 猜 你 喜 欢 cm6 6 猜 你 喜 欢 sns 关 系 分 析 cm6 4 sns 关 系 分 析 图 片 元 数 据 管 理 cm4 7 集 团 图 片 元 数 据 管 理 公 用 群 集 1 cm4 8 公 用 群 集 ( 淘 足 迹 逛 女 装 ) 最 大 表 格 : 收 藏 夹 10031274509 最 大 qps/tps:45000 / 2500( 一 次 scan 60 行 ) 单 日 更 新 数 据 量 :5 亿 条 ( 约 120GB redo log) OLAP 业 务 最 大 表 格 :P4P 49412041894 单 次 请 求 最 多 行 数 : 约 500 万,RT < 3 秒 最 大 导 入 数 据 量 :SNS 每 天 2TB(4 台 机 器 )
读 写 性 能 category item ops average response time(us) read select 10 rows, block cache hit 100% 47,000 2,183 select 10rows, block cache miss 100% 16,000 7,322 select 1 row, row cache hit 100% 63,000 903 write insert/update/delete( 1 row) 120,000 150
开 源 获 取 更 多 信 息, 请 访 问 : http://oceanbase.alibaba-inc.com/
2013 年 04 月