armink / FlashDB

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

GC的时机问题 #335

Open alexyuoouy opened 1 week ago

alexyuoouy commented 1 week ago

大家好,最近使用FlashDB时,遇到一个问题,由于在申请空间和写入完之后来判断是否需要进行一下GC,所以在程序里的任何调用fdb_kv_set_blob或者fdb_kv_set的地方,都有可能进行一次GC,这就要求所有使用KVDB的任务,都要留够一次GC所用到的栈空间,这对于资源较紧张的单片机来说不大友好,而且这样会使这个过程不可控,不知道它会什么时候运行,由于flash操作缓慢,它如果在高优先级任务中执行,那么还可能会影响到实时性。

我目前应用里是把所有自动GC都屏蔽掉了,然后又写了一个函数,放在一个周期任务中手动检查扇区剩余空间和剩余扇区来判断是否需要GC,这样会牺牲一些flash空间,因为手动调用没办法卡的那么合适,但是省了不少任务栈。

大家觉得这个问题是否是个问题?这么解决是否合适?

armink commented 2 days ago

最新版本的 GC 并不会全盘进行垃圾回收,基本只会回收 1 个扇区。只是一个扇区的擦写,是不是影响不大了呢?

BurnerK commented 2 days ago

最新版本的 GC 并不会全盘进行垃圾回收,基本只会回收 1 个扇区。只是一个扇区的擦写,是不是影响不大了呢?

请问GC时,大概会占用多少任务内存空间?