内存数据库在系统架构中的地位

119 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第17天,点击查看活动详情

很多数据库的数据结构都是为适应磁盘限制。与内存相比,磁盘更难处理。磁盘和SSD,若想在读取和写入时获得良好性能,则需精心安排磁盘上的数据布局。但这些工作值得,因为磁盘有显著优点:

  • 数据保存持久化
  • 每GB的成本比内存低太多

随内存变便宜,每GB成本更低。许多数据集不是那么大,可将它们全部保存在内存或分布在多机。催动内存数据库发展。

某些内存中的KV存储(如Memcached)主要用于缓存,即使机器重启造成数据丢失也能接受。但其他内存数据库旨在实现持久性,可通过:

  • 特殊硬件(如电池供电的内存)
  • 或将更改记录写入磁盘日志
  • 或定时快照写盘
  • 或将内存中的状态复制到其他机器

内存数据库重启时,需从磁盘或通过网络从副本(除非使用特殊的硬件)重新加载数据。尽管写盘,但磁盘仅为持久化的追加日志,读取还是全靠内存服务。写盘还有运维优势:磁盘文件可容易通过外部工具执行备份,检查和分析。

如VoltDB,MemSQL和Oracle TimesTen等产品是具有关系模型的内存数据库,供应商称通过消除与管理磁盘上的数据结构相关的所有开销,他们可提供巨大性能提升。 RAM Cloud,开源内存KV存储器,具有持久性(对内存及磁盘上的数据使用日志结构)。 Redis和Couchbase通过异步写盘提供较弱的持久性。

内存数据库的优势

性能

其实并非因为无需从磁盘读。即使是基于磁盘的存储引擎,也可能永远无需从磁盘读取,因为os在内存中已缓存最近使用的磁盘块。相反,更快原因其实在于避免使用写盘的格式对内存数据结构进行编码的开销。

数据模型

提供基于磁盘索引难以实现的某些数据模型。如Redis为各种数据结构(如优先级队列和集合)都提供类似数据库的访问接口。由于所有数据都保存在内存,所以实现也更简单。

内存数据库体系结构可以扩展到支持比可用内存更大的数据集,而不会导致以磁盘为中心架构的开销。所谓的 反缓存(anti-caching) 方法:当无足够内存时,通过将最近最少使用的数据从内存写盘,并在将来再次被访问时再加载到内存。这与os对虚拟内存和交换文件的操作类似,但数据库可以在记录级别而非整个内存页的粒度工作,因而比os更有效地管理内存。但这种方法仍需索引能完全放入内存。

非易失性存储器(NVM) 技术得到更广泛应用,可能还需进一步改变存储引擎设计,值得关注。