由于现在内存价格变得越来越便宜,可以考虑将数据全部放到内存中成为内存数据库(Main Memory Database System, MMDB)。和传统的磁盘数据库相比(Disk Resident Database System,DRDB),有以下一些不同之处。
磁盘 | 内存 | |
---|---|---|
响应时间 | 大 | 小 |
受否易损坏 | 否 | 是 |
读数据成本 | 高,固定(以block为单位) | 低 |
数据分布 | 要求高(顺序读的快于随机读) | 要求低 |
接近数据的方式 | 间接使用数据 | 直接访问数据(更容易损坏) |
接下来考虑一下将整个数据都装入内容是否合理。有以下的场景可以考虑内存数据库:
- 实时的应用程序(real-time appplication),要求整个数据装入内容以提高响应时间
- 数据的2/8分类。20%的数据是热数据。80%的数据是冷数据。
- 将数据库分为多个逻辑的数据库,一些是MMDB,另一些是DRDB。
- 这些数据库可以单独分离(分库分区),也可以集成到一个系统(考虑数据迁移(Data Migration))
- 注意Data Cache和Data Migration的区别,Data Cache指的是缓存值,比如Redis-MySQL,而迁移指的是从一种介质到另一种介质,可能伴随着数据结构和访问方式的变化。
MMDB和具有大缓存的DRDB的区别:
大缓存的DRDB | MMDB | |
---|---|---|
索引 | 面向磁盘的B+ TREE | 面向内存的索引 |
访问record方式 | 根据record计算读取的页面,加载到bufferpool中读取,还涉及到操作系统内存到数据库内存的内存拷贝 | 内存地址(swizzling) |
指针交换(Swizzling) 是一种优化技术,用于在数据从磁盘加载到内存后,将磁盘地址或逻辑表示转换为内存指针(直接引用)。通过这种方式,应用程序可以直接访问内存中的数据,而不需要每次通过缓冲区管理器或磁盘地址间接访问
内存数据库需要频繁备份:
- 由于数据在内容中,其它错误(操作系统)可能导致数据丢失
- 内存与磁盘故障的恢复差异:
- 磁盘故障后,仅需恢复该磁盘上的部分数据,而不影响其他磁盘。恢复期间,系统中的其他数据仍然可访问。
- 但内存板的故障通常需要关闭整个系统,导致整个数据库丢失。内存数据恢复时间更长,因此需要提供最新的备份(备份越旧,日志恢复时间越长)。
</