Main Memory Database Systems: An Overview
https://dl.acm.org/doi/10.1109/69.180602
数据是否完全放在内存中?什么应用需要MMDB?即便全量数据没有完全放入内存,也可以将冷热数据分离。
Example of such real-time applications include telecommunications(e.g., 800 telephone numbers need to be translatedto real numbers), radar tracking (e.g., signatures of objects need to be matched against a databaseof known aircraft), and securities trading (e.g., trading opportunities must be discovered and executed before they vanish).
即使数据可以全部放入到memory里面, MMDB(main memory) 和 DRDB(disk based) 依然存在很大的差别,所以索引结构,tuple表示方法,并发控制,事务实现等等,还有比如pointer swizzling这样的技术。不过作者认为随着实现不断迭代,两者之间的差异会越来越小。
MMDB面临需要面临如下几种系统故障:
- 操作系统故障(operating system)
- 硬件系统故障(memory board)
- 外部设备比如UPS故障
虽然这些故障概率比较低,但是恢复代价却比较大,因为MMDB通常是log + snapshot方式来进行持久化的。如果log太多的话那么重启回放时间就会增加,这个对于MMDB high performance应用场景是冲突的。所以实际应用中,需要经常创建snapshot并且进行备份,这就导致其实MMDB的备份频率会增加。
文章从几个点解释MMDB特点:
- Concurreny Control. 因为txn速度可能很快,所以lock contention会相对较高。这个时候使用coarse-granularity lock可能会有更好的效果,更大范围的锁可以让txn cpu cache使用率更高。
- Commit Processing. 使用group commits技术来减少写log的影响。
- Access Methods. 索引设计上可以有所变化,比如T-Tree以及现在许多MMDB使用的skiplist.
- Data Representation. blob可以连续存放而不用按照page进行切分。
- Query Processing. DRDB在选择计划时候目标是minimize disk access而MMDB则不需要考虑这个问题。
- Recovery. 因为MMDB几乎没有disk操作,所以可以disk IO使用的Block size可以更大来提高吞吐。
- Performance. 单纯地从query角度来看MMDB肯定更好,但是也需要考虑它做backup的成本。
- API & Protection. 因为object都是在固定内存地址上的,所以txn可以实现许多优化,但是这些优化也需要某些保护。
- Data Clustering & Migration. DRDB需要根据query pattern设计数据clustering,以及数据在Disk上表示方式,MMDB这些都不需要考虑。