问题描述
我在嵌入式系统中使用 sqlite 开源数据库。
我在PRAGMA下面设置了
qDb.exec("PRAGMA synchronous = OFF");
qDb.exec("PRAGMA journal_mode = MEMORY");
PRAGMA用于内存中工作。 如果没有此标志,数据库性能将变慢,但是在执行PRAGMA之后,性能的提高确实非常明显。
因此,我决定为嵌入式应用程序使用内存数据库。 我知道内存中数据库的整个数据集在RAM中,而传统数据库中的整个数据库在disK中。 因此,RAM操作要比disK操作快。
我的问题
-
我想了解何时将数据写入主存储器? (
Let's say I have written 100 rows in table A. After which time it is safe to the power of the device
) -
如何最大程度地减少内存数据库中的数据丢失风险。 (
Is it technically possible
)
如果我的理解错误,请纠正我。
感谢您阅读。
解决方法
SQLite具有一个检查点,该点是受管理的数据,用于将数据写入主内存。
当事务日志文件自上一个检查点以来大于X GB时,将使用自动检查点。然后,在事务日志数据达到该大小之后,就会从RAM写入主存储器。
当数据库文件上的最后一个数据库连接关闭时,数据也会写入主内存中。