繁体   English   中英

内存数据库如何持久化数据

[英]How in-memory databases persist data

我一直在研究内存数据库的概念。 关于那条的文章说,

内存数据库系统是一种将数据完全存储在主内存中的数据库管理系统。

他们讨论了此概念的优缺点。

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

停电后所有数据都消失了吗???

或有什么方法可以保护数据???

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

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

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

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

不同的介质将对性能产生或多或少的影响。 HDD的影响最大,其次是SSD,其次是内存层闪存(例如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)撰写的,但与供应商无关。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM