我正在研究内存中数据库的概念。关于这一点的文章说,
内存中数据库系统是一种将数据完全存储在主存中的数据库管理系统。
他们讨论了这个概念的优点和缺点。
我的问题是,如果这些数据库管理系统将数据完全存储在主存储器中
停电后所有的数据都消失了吗???
或者有保护数据的方法吗???
大多数内存中数据库系统都提供持久性,至少作为一种选择。这是通过事务日志记录实现的。正常关闭时,会保存内存中的数据库映像。下一次重新打开时,会加载上一个保存的映像,此后,提交到内存中数据库的每个事务也会附加到事务日志文件中。如果系统异常终止,可以通过重新加载原始数据库映像并从事务日志文件中回放事务来恢复数据库。
数据库仍然全部在内存中,因此必须有足够的可用系统内存来存储整个数据库,这使得它不同于只有一部分缓存在内存中的持久数据库。因此,消除了缓存命中或缓存未命中的不可预测性。
将事务附加到日志文件通常可以同步或异步完成,这将具有非常不同的性能特征。如果未从文件系统缓冲区中清除已提交的事务,并且系统意外关闭(即内核死机),异步事务日志记录仍有丢失已提交事务的风险。
内存数据库事务日志记录保证只发生一次文件I/O,将事务附加到日志文件中。事务大小无关紧要,它仍然只是对持久介质的一次写入。此外,写入总是顺序的(总是附加到日志文件),因此即使在旋转介质上,性能影响也尽可能小
不同的介质会对性能产生或多或少的影响。HDD的影响最大,其次是SSD,然后是内存层FLASH(例如FusionIO PCIExpress卡),NVDIMM内存的影响最小。
NVDIMM内存可用于存储内存中的数据库,或存储事务日志以进行恢复。最大NVDIMM内存大小小于传统内存大小(而且更昂贵),但如果内存中数据库的大小为几GB,则此选项可以保留内存中数据库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)撰写,但与供应商无关。