针对数据库存储存满的情况,FlashDB具有良好的处理机制。一般flash存满之后都需要整块擦除才能进行下一次存储,这样会造成擦除时间过长占用时间片的问题。FlashDB数据通过动态擦除、动态存储和状态位切换的方式完美的解决了数据库存满之后需要整块擦除的弊端。
1.sector(区块)定义
(1)区块大小
FlashDB的区块大小为4K字节,刚好是一个外部flash的最小区块单元,这样划分便于擦除和写入。
(2)区块参数
区块主要有校验标志、状态、区块首地址、起始node时间、结束node时间、结束node的id、结束node的状态、剩余的长度等参数,以下会针对具体参数进行详细阐述。
/* TSDB section information */
struct tsdb_sec_info {
bool check_ok; /**< sector header check is OK */
fdb_sector_store_status_t status; /**< sector store status @see fdb_sector_store_status_t */
uint32_t addr; /**< sector start address */
uint32_t magic; /**< magic word(`T`, `S`, `L`, `0`) */
fdb_time_t start_time; /**< the first start node's timestamp, 0xFFFFFFFF: unused */
fdb_time_t end_time; /**< the last end node's time

FlashDB采用动态擦除、存储和状态位切换的方式解决数据库存满后整块擦除的问题。其区块大小为4K,包含校验、状态等参数,并有未使用、空、使用中、满四种状态。在存储过程中,首次存储直接标记为USING,过程中存储继续写入,满状态时会切换到下一区块并擦除。通过这种回滚存储策略,FlashDB能有效地管理数据库空间。
最低0.47元/天 解锁文章
3744

被折叠的 条评论
为什么被折叠?



