内存数据库如何保留数据

时间:2016-06-04 10:53:50

标签: database in-memory-database

我正在研究内存数据库的概念。关于这一点的文章说,

  

内存数据库系统是一个数据库管理系统,它将数据完全存储在主内存中。

他们讨论了这个概念的优点和缺点。

我的问题是,如果这些数据库管理系统将数据完全存储在主存储器中,

电源故障后所有数据都消失了吗?

还是有办法保护数据???

1 个答案:

答案 0 :(得分:6)

大多数内存数据库系统提供持久性,至少作为一种选择。这是通过事务日志记录实现的。在正常关闭时,将保存内存数据库映像。当下次重新打开时,将加载先前保存的图像,此后,提交到内存数据库的每个事务也会附加到事务日志文件中。如果系统异常终止,则可以通过重新加载原始数据库映像并从事务日志文件重放事务来恢复数据库。

数据库仍然全部在内存中,因此必须有足够的可用系统内存来存储整个数据库,这使得它与只有一部分缓存在内存中的持久数据库不同。因此,消除了缓存命中或缓存未命中的不可预测性。

将事务附加到日志文件通常可以同步或异步完成,这将具有非常不同的性能特征。如果未从文件系统缓冲区刷新并且系统意外关闭(即内核崩溃),则异步事务日志记录仍有可能丢失已提交的事务。

内存数据库事务日志记录保证只会产生一个文件I / O以将事务附加到日志文件。如果交易大或小,无关紧要,它仍然只是对持久性媒体的一次写入。此外,写入始终是顺序的(始终附加到日志文件中),因此即使在旋转介质上,性能损失也尽可能小。

不同的媒体会对性能产生更大或更小的影响。 HDD将拥有最强大的功能,其次是SSD,然后是内存层FLASH(例如FusionIO PCI Express卡),而来自NVDIMM内存的影响最小。

NVDIMM内存可用于存储内存数据库,或存储事务日志以进行恢复。最大NVDIMM内存大小小于传统内存大小(并且更昂贵),但如果内存数据库的大小为几千兆字节,则此选项可以保留内存数据库的100%性能,同时还提供相同的持久性作为持久媒体上的传统数据库。

在本白皮书中,内存数据库与HDD,SSD和FusionIO的事务日志记录进行了性能比较:http://www.automation.com/pdf_articles/mcobject/McObject_Fast_Durable_Data_Management.pdf

本文中使用NVDIMM:http://www.odbms.org/wp-content/uploads/2014/06/IMDS-NVDIMM-paper.pdf

论文由我们(McObject)撰写,但与供应商无关。