armink / FlashDB

An ultra-lightweight database that supports key-value and time series data | 一款支持 KV 数据和时序数据的超轻量级数据库
Apache License 2.0
1.83k stars 420 forks source link

KVDB在FILE_MODE下的事务操作支持 #50

Open jjldc opened 3 years ago

jjldc commented 3 years ago

KVDB的一个重要应用场景是嵌入式系统的参数存储,通常这种场景下会有多个参数批量设置的操作。 在多个参数同时修改期间如果操作中断或断电,会出现一半新参数、一半旧参数的问题。在关键设备中可能会引起严重问题,参考事务型文件系统,操作中断后可以自动回滚到上一个版本,保证数据一致性。 针对这个,目前是否有好的解决方法么?

目前在做的FILE_MODE功能中,是否可以考虑简单的设置AB两份数据库文件先后写入的方式来实现回滚操作?

armink commented 3 years ago

FlashDB 本身是支持回滚的,即使是启用 FILE_MODE ,功能上同样也是支持的

就是底层文件系统选型时,是需要有掉电保护功能的支持,比如:littlefs 。如果掉电后,文件系统崩了,那 FlashDB 也无能为力了

jjldc commented 3 years ago

FlashDB的回滚是基于单个kv的status状态做的回滚吧? API中只有fdb_kv_set单个kv的接口,没有set一组kv的接口。当连续设置一组kv时,也许要求1/2/3/4四个参数必须同时写入。当依次调用fdb_kv_set修改值期间出现断电等故障,可能出现1/2是新数据,3/4是旧数据的情况吧 我刚开始看代码,可能理解还不深,说错了请包涵。

armink commented 3 years ago

是的,现在只有单个 KV 的操作接口,毕竟是嵌入式设备相比还是功能简单了一些

单个 KV 出错后,回滚是支持的