内存数据库的内部架构

问题描述

我在嵌入式系统中使用 sqlite 开源数据库
我在PRAGMA下面设置了

qDb.exec("PRAGMA synchronous = OFF");
qDb.exec("PRAGMA journal_mode = MEMORY");

PRAGMA用于内存中工作。 如果没有此标志,数据库性能将变慢,但是在执行PRAGMA之后,性能的提高确实非常明显。

因此,我决定为嵌入式应用程序使用内存数据库。 我知道内存中数据库的整个数据集在RAM中,而传统数据库中的整个数据库disK中。 因此,RAM操作要比disK操作快。

我的问题

  1. 我想了解何时将数据写入主存储器? (Let's say I have written 100 rows in table A. After which time it is safe to the power of the device

  2. 如何最大程度地减少内存数据库中的数据丢失风险。 (Is it technically possible

如果我的理解错误,请纠正我。

感谢您阅读。

解决方法

SQLite具有一个检查点,该点是受管理的数据,用于将数据写入主内存。

当事务日志文件自上一个检查点以来大于X GB时,将使用自动检查点。然后,在事务日志数据达到该大小之后,就会从RAM写入主存储器。

当数据库文件上的最后一个数据库连接关闭时,数据也会写入主内存中。