数据库简介
数据库的特点
- 原子性 : 一笔账,要么转了,要么没转
- 一致性 : 出账入账必须一致
- 隔离性 : 多人转账不得相互影响
- 持久性 : 转账一旦发生,持久存在
还有两个:
- 高可用
- 高性能
数据库 vs 计算机
服务器:处理器,内存,磁盘,网卡
- 原子性:计算机只能保证寄存器的原子
- 一致性:单个服务器上数据一致性比较好做
- 隔离性:多个事务串行处理隔离性不好做
- 持久性:磁盘或者固态盘才有持久性
- 高可用:磁盘年均故障率1%-3%,单个磁盘可用率99%-99.9%
- 高性能:服务器性能
数据库和互联网
银行 + 商务
网购:一次商务+一次金融
双十一:一天350亿,55s超过1个亿,支付宝2亿笔交易,头一分钟一千万买家上线
黑色星期五:美国19.3亿美元
互联网时代数据库的要求
ACID无法取代
在线金融、网购需要数据库高可用99.999%
可扩展性,性价比
oceanbase
高档服务器,高档存储,高深的数据库软件
传统数据库的高可用:
主库+备库, 共享存储,数据同步备库
主备同步三种模式:
- 最大同步,可用性太差
- 最高性能,一致性太差
- 最大可用,尽力同步,备库应答OK,超时则容错,有丢失风险
银行可靠性依赖于物理可靠性
传统数据库性价比不高,硬件,软件很贵
oceanbase 用了普通服务器,水平扩展 = 云计算+关系数据库 , 存储大部分是固态盘
性能+可用性+扩展性
性能
- 机械盘读 : 机械磁盘随机读 100-300次/秒(IOPS)
-
SSD随机读: 几万次每秒
- 机械盘写:100-300次/秒
- 数据库写入放大:每次修改100B导致4k块的修改,oracle 8k mysql 16k, 产生几十倍的放大效应
- 固态盘:写入放大,先擦后写,有时候一次擦十几兆,需要先读再迁再擦再写
全内存数据库
- 性能高,性价比低,容量小
- 适用需要极高性能且数据量小的业务
Oceanbase
内外存混合数据库
内存:热数据,频繁修改
外存:冷数据
性能略逊,容量大,性价比高
消除传统数据库写入放大
高可用:如何以低可靠硬件实现
oceanbase Milestone:
淘宝收藏夹->双集群(可以升级改bug对业务透明)-> OLAP功能 -> SQL支持 -> 三集群(分布式投票)
oceanbase应用
- 稳定可靠
- 可在线扩展,业务增长过快
- 高性能低成本
- 不锁表创建索引
oceanbase质量保证
严格的c/c++编码规范
- 资源申请者负责释放
- 单入口单出口
- 定长内存管理
- 禁用全局变量,goto
- 严格限制使用stl
- 统一编码风格
无处不在的crc
oceanbase数据校验
- 磁盘读写,每个记录带64位CRC
- 网络传输:每个网络包带64位CRC
- 多副本多个crc
- 修改增量多副本:64位CRC校验
- redolog:每条带64位crc
- 每个表每个列64位crc
灰度升级
小结:
数据库是人类伟大智慧的结晶
机会:
- 云计算技术
- 网购繁荣
- 中国经济腾飞
- ssd普及
- 优秀技术人才
PREVIOUS常见的防御性编程策略
NEXT记一个实际中遇到的覆盖问题