armink / FlashDB

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

KVDB在写满后再次写入失败,需要写入第二次 #273

Closed xushenghao closed 6 months ago

xushenghao commented 6 months ago

朱工,您好! 项目中用到了您的FlashDB的KVDB功能。 FlashDB版本:2.1.0 3个存储芯片:M95512,大小65536,块2048 kv的值最大是1100,最小32,一共4个kv 测试过程:循环写,空间写满后会触发FDB_SAVED_FULL,再调用一次写入后空间才释放成功

fdb_kvdb.c:1241   处触发

   else if (already_gc)
        {
            FDB_INFO("Error: Alloc an KV (size %" PRIuLEAST16 ") failed after GC. KV full.\n", kv_size);
            db->gc_request = false;
        }

经过测试后发现,再次执行fdb_kv_set_blob可以写入,因为使用的是eeprom,存储空间小,所以定义的block只有2048。 因为KVDB有自动回收的策略,所以我不知道是不是我使用的方法上有什么问题。请朱大大指点!!!

xushenghao commented 6 months ago

想了下应该是3个eeprom芯片在同一个文件系统上是无法工作的,需要做一些处理,这个问题暂时先关闭了