一个基于disk的队列型存储引擎
我们有一种场景,将用户在画布上的操作保存下来。操作
的模型已经使用特定的序列化方法变成二进制。
操作有特定的顺序。
对每个操作,都需要去校验操作的合法性。
合法操作才会被确认,不合法的,会被忽略(一种策略,也可以是删除)。
获取时,需要按 ① 特定字段 ② offset ③ ID ④ 时间 获取,且有范围获取。
数据大小,大多为 100B ,但存在 50MB 的可能。
这和 writeahead log 类似。
其他客户端,类似于订阅 binlog。
从技术上看这个问题,有以下思路:
- 这整体是一个队列
- 同时兼容 kv 的索引
- 需要持久化
队列的问题域:
- 队列大小
- 轮转
- 压缩
存储的问题域:
- 存储介质
- 磁盘存储
- 数据库存储
- 序列化问题
- 缓存问题
- 内存缓存
- 本地缓存
索引的问题域:
- 索引建立
- 索引更新
- 索引重构
- 全量索引与稀疏索引
- 索引的存储形态
其他问题域:
- 锁问题
- 迁移问题
- schema 变更问题
- 事务支持
业务的时序图应当为:
1 |
|
面向接口编程,识别 entity ,识别关系。
It is no use saying, ‘We are doing our best.’ You have got to succeed in doing what is necessary.
— Winston Churchill
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!