外存数据库的特点
每次写入需要读取一个完整单元,不同的块做不同的修改,再写回硬盘
oceanbase的特点
本质上差不多,但是快大小不一样,但是增量数据(修改点)集中存储。可以更好的利用内存,利用低峰期合并到内存。但是每次需要读取静态数据和修改。
相对来讲,优化了写入,牺牲了部分读取(完全命中bloomfilter的可以不读静态,相当于内存数据库,不存在动态数据的查询相当于传统数据库)。
业界的内存数据库
- VoltDB
- MemSQL
内存数据库很贵
存储事务引擎
- hash索引:散列存储,单点查询更快
- B+树索引:顺序索引,范围查询
更新流程
- 根据主键找到行所在位置
- 加锁
多版本并发控制
针对高并发的请求,分配在一个队列里面,排队,不需要抢锁。线程可以省下来给其他
通过 /hot_spot/的hint实现,交给用户决定
写日志的性能瓶颈
每次写两条日志,保证两台备机写成功,1333条每秒
只能通过软件上的改变,group commit
每次commit合并多个写日志请求。
条件:
- 空闲的时候直接commit。有日志来的时候判断没有日志在写,就提交。
- 聚集到一个阈值的时候写。有日志在写,就放到buffer里面。直到达到阈值。
- 如果第一个写完日志,系统空闲,就写日志。
总结
- 内存数据库+分布式系统的设计
- mvcc的实现
- group commit
PREVIOUS记一个实际中遇到的覆盖问题
NEXT分布式选主-笔记