armink / FlashDB

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

测试tsdb连续保存累计数达一定数量后出现前面部分数据丢失的现象 #275

Open biqi2 opened 8 months ago

biqi2 commented 8 months ago

1、用的例程为‘stm32f103ve’,STM32单片机型号为STM32F105RBT6,其FLASH=128Kbyte,RAM=64Kbyte,其blk_size=2K,相关配置如下 image image image image 从上面可见tsdb的缓存范围为对应SMT32内部FLASH的第50K地址处开始直到54K-1地址处结束. 2、在main函数中两个例子/ KVDB Sample /、/ TSDB Sample /之后增加了while循环反复执行这两个例子中的核心函数kvdb_basic_sample(&kvdb)及tsdb_sample(&tsdb);main代码如下: int temp_int; int main(void) { fdb_err_t result;

// print_stm32_ic_information();//打印STM32芯片信息

ifdef FDB_USING_KVDB

{ /* KVDB Sample */
    struct fdb_default_kv default_kv;

    default_kv.kvs = default_kv_table;
    default_kv.num = sizeof(default_kv_table) / sizeof(default_kv_table[0]);
    /* set the lock and unlock function if you want */
    fdb_kvdb_control(&kvdb, FDB_KVDB_CTRL_SET_LOCK, (void *)lock);
    fdb_kvdb_control(&kvdb, FDB_KVDB_CTRL_SET_UNLOCK, (void *)unlock);
    /* Key-Value database initialization
     *
     *       &kvdb: database object
     *       "env": database name
     * "fdb_kvdb1": The flash partition name base on FAL. Please make sure it's in FAL partition table.
     *              Please change to YOUR partition name.
     * &default_kv: The default KV nodes. It will auto add to KVDB when first initialize successfully.
     *        NULL: The user data if you need, now is empty.
     */
    result = fdb_kvdb_init(&kvdb, "env", "fdb_kvdb1", &default_kv, NULL);

    if (result != FDB_NO_ERR) {
        return -1;
    }

    /* run basic KV samples */
    kvdb_basic_sample(&kvdb);
    /* run string KV samples */
    kvdb_type_string_sample(&kvdb);
    /* run blob KV samples */
    kvdb_type_blob_sample(&kvdb);
}

endif / FDB_USING_KVDB /

ifdef FDB_USING_TSDB

{ /* TSDB Sample */
    /* set the lock and unlock function if you want */
    fdb_tsdb_control(&tsdb, FDB_TSDB_CTRL_SET_LOCK, (void *)lock);
    fdb_tsdb_control(&tsdb, FDB_TSDB_CTRL_SET_UNLOCK, (void *)unlock);
    /* Time series database initialization
     *
     *       &tsdb: database object
     *       "log": database name
     * "fdb_tsdb1": The flash partition name base on FAL. Please make sure it's in FAL partition table.
     *              Please change to YOUR partition name.
     *    get_time: The get current timestamp function.
     *         128: maximum length of each log
     *        NULL: The user data if you need, now is empty.
     */
    result = fdb_tsdb_init(&tsdb, "log", "fdb_tsdb1", get_time, 128, NULL);
    /* read last saved time for simulated timestamp */
    fdb_tsdb_control(&tsdb, FDB_TSDB_CTRL_GET_LAST_TIME, &counts);
    //这一步的目的是将tsdb对象中的last_time成员恢复到静态变量counts中;因为上一行fdb_tsdb_init()函数
    //在上电后初始化ts类型的fdb数据库时调用函数get_time()得到变量counts(初始值0累加1后的结果)=1作为当前时间戳,显然这个当前时间戳只有在下载程序后的首次运行时正确的
    //在进行了计秒操作后重新上电得到的这个是不正确的。因此就需要将tsdb对象中的last_time成员赋值给计秒变量。

    //在这个例程中静态变量counts的值代表的是当前模拟的时间戳值,时间戳本意是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。
    //由于这个例程没有建立时间计秒机制,因此这里使用get_time()函数来模拟计秒动作(对counts累加一次),
    //凡是在需要执行累加一秒操作的地方都调用一次get_time()函数,此函数在两个地方会被调用到,一是函数fdb_tsdb_init()初始化数据库的地方,另一个是函数fdb_tsl_append()追加新数据时;

    if (result != FDB_NO_ERR) {
        return -1;
    }

    /* run TSDB sample */
    tsdb_sample(&tsdb);
}

endif / FDB_USING_TSDB /

// HAL_Delay(500);//延时1000ms; // soft_reset();//执行软件复位; while(1) { / run basic KV samples / kvdb_basic_sample(&kvdb);

    /* run TSDB sample */
    tsdb_sample(&tsdb);     

    if(temp_int%50==0)
    {
        HAL_Delay(1000);
    }
}

return 0;

}

3、增加了一个全局变量int temp_int来保存kvdb_basic_sample(&kvdb)函数中计数变量boot_count的值。代码如下: extern int temp_int; void kvdb_basic_sample(fdb_kvdb_t kvdb) { struct fdb_blob blob; int boot_count = 0;

FDB_INFO("==================== kvdb_basic_sample ====================\n");

{ /* GET the KV value */
    /* get the "boot_count" KV value */
    fdb_kv_get_blob(kvdb, "boot_count", fdb_blob_make(&blob, &boot_count, sizeof(boot_count)));
    /* the blob.saved.len is more than 0 when get the value successful */
    if (blob.saved.len > 0) {
        FDB_INFO("get the 'boot_count' value is %d\n", boot_count);
    } else {
        FDB_INFO("get the 'boot_count' failed\n");
    }
}

{ /* CHANGE the KV value */
    /* increase the boot count */
    boot_count ++;
    /* change the "boot_count" KV's value */
    fdb_kv_set_blob(kvdb, "boot_count", fdb_blob_make(&blob, &boot_count, sizeof(boot_count)));
    FDB_INFO("set the 'boot_count' value to %d\n", boot_count);
}

FDB_INFO("===========================================================\n");

temp_int=boot_count; } 4、同时对tsdb_sample(&tsdb)函数进行了删减,让其每调用一次都只执行两个动作。动作一:用temp_int来给status.temp和status.humi赋予相同的值,然后追加一条ts数据;动作二:执行fdb_tsl_iter(tsdb, query_cb, tsdb)函数打印所有保存的ts数据;代码如下: extern int temp_int; void tsdb_sample(fdb_tsdb_t tsdb) { struct fdb_blob blob;

FDB_INFO("==================== tsdb_sample ====================\n");

{ /* APPEND new TSL (time series log) */
    struct env_status status;

    /* append new log to TSDB */

// status.temp = 38; // status.humi = 90;
status.temp = temp_int; status.humi = temp_int; fdb_tsl_append(tsdb, fdb_blob_make(&blob, &status, sizeof(status))); FDB_INFO("append the new status.temp (%d) and status.humi (%d)\n", status.temp, status.humi);

// status.temp = 38; // status.humi = 90; // fdb_tsl_append(tsdb, fdb_blob_make(&blob, &status, sizeof(status))); // FDB_INFO("append the new status.temp (%d) and status.humi (%d)\n", status.temp, status.humi); }

{ /* QUERY the TSDB */
    /* query all TSL in TSDB by iterator */
    fdb_tsl_iter(tsdb, query_cb, tsdb);
}

{ /* QUERY the TSDB by time */
    /* prepare query time (from 1970-01-01 00:00:00 to 2020-05-05 00:00:00) */
    struct tm tm_from = { .tm_year = 1970/* - 1900*/, .tm_mon = 0, .tm_mday = 1, .tm_hour = 0, .tm_min = 0, .tm_sec = 0 };
    struct tm tm_to = { .tm_year = 2020/* - 1900*/, .tm_mon = 4, .tm_mday = 5, .tm_hour = 0, .tm_min = 0, .tm_sec = 0 };
    time_t from_time = mktime(&tm_from), to_time = mktime(&tm_to);

//mktime,作用是,将时间转换为自1970年1月1日以来持续时间的秒数,发生错误时返回-1 size_t count; / query all TSL in TSDB by time / // fdb_tsl_iter_by_time(tsdb, from_time, to_time, query_by_time_cb, tsdb); / query all FDB_TSL_WRITE status TSL's count in TSDB by time / // count = fdb_tsl_query_count(tsdb, from_time, to_time, FDB_TSL_WRITE); // FDB_INFO("query count is: %zu\n", count); }

{ /* SET the TSL status */
    /* Change the TSL status by iterator or time iterator
     * set_status_cb: the change operation will in this callback
     *
     * NOTE: The actions to modify the state must be in order.
     *       like: FDB_TSL_WRITE -> FDB_TSL_USER_STATUS1 -> FDB_TSL_DELETED -> FDB_TSL_USER_STATUS2
     *       The intermediate states can also be ignored.
     *       such as: FDB_TSL_WRITE -> FDB_TSL_DELETED
     */

// fdb_tsl_iter(tsdb, set_status_cb, tsdb); }

FDB_INFO("===========================================================\n");

} 5、发现的问题: 通过串口打印的信息发现当boot_count的值由1累计到98次时输出的全部ts数据正常,但值累计到第99次后输出的全部ts数据 的开头第一个数据变为先前的第50个数据了(也就是丢失了最早的第1~第49个数据)。请各位大神帮忙分析一下原因。 如下: [FlashDB][sample][kvdb][basic] ==================== kvdb_basic_sample ==================== [FlashDB][sample][kvdb][basic] get the 'boot_count' value is 97 [FlashDB][sample][kvdb][basic] set the 'boot_count' value to 98 [FlashDB][sample][kvdb][basic] =========================================================== [FlashDB][sample][tsdb] ==================== tsdb_sample ==================== [FlashDB][sample][tsdb] append the new status.temp (98) and status.humi (98) [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 1, temp: 1, humi: 1 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 2, temp: 2, humi: 2 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 3, temp: 3, humi: 3 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 4, temp: 4, humi: 4 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 5, temp: 5, humi: 5 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 6, temp: 6, humi: 6 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 7, temp: 7, humi: 7 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 8, temp: 8, humi: 8 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 9, temp: 9, humi: 9 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 10, temp: 10, humi: 10 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 11, temp: 11, humi: 11 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 12, temp: 12, humi: 12 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 13, temp: 13, humi: 13 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 14, temp: 14, humi: 14 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 15, temp: 15, humi: 15 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 16, temp: 16, humi: 16 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 17, temp: 17, humi: 17 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 18, temp: 18, humi: 18 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 19, temp: 19, humi: 19 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 20, temp: 20, humi: 20 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 21, temp: 21, humi: 21 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 22, temp: 22, humi: 22 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 23, temp: 23, humi: 23 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 24, temp: 24, humi: 24 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 25, temp: 25, humi: 25 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 26, temp: 26, humi: 26 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 27, temp: 27, humi: 27 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 28, temp: 28, humi: 28 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 29, temp: 29, humi: 29 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 30, temp: 30, humi: 30 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 31, temp: 31, humi: 31 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 32, temp: 32, humi: 32 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 33, temp: 33, humi: 33 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 34, temp: 34, humi: 34 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 35, temp: 35, humi: 35 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 36, temp: 36, humi: 36 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 37, temp: 37, humi: 37 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 38, temp: 38, humi: 38 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 39, temp: 39, humi: 39 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 40, temp: 40, humi: 40 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 41, temp: 41, humi: 41 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 42, temp: 42, humi: 42 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 43, temp: 43, humi: 43 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 44, temp: 44, humi: 44 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 45, temp: 45, humi: 45 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 46, temp: 46, humi: 46 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 47, temp: 47, humi: 47 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 48, temp: 48, humi: 48 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 49, temp: 49, humi: 49 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 50, temp: 50, humi: 50 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 51, temp: 51, humi: 51 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 52, temp: 52, humi: 52 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 53, temp: 53, humi: 53 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 54, temp: 54, humi: 54 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 55, temp: 55, humi: 55 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 56, temp: 56, humi: 56 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 57, temp: 57, humi: 57 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 58, temp: 58, humi: 58 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 59, temp: 59, humi: 59 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 60, temp: 60, humi: 60 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 61, temp: 61, humi: 61 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 62, temp: 62, humi: 62 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 63, temp: 63, humi: 63 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 64, temp: 64, humi: 64 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 65, temp: 65, humi: 65 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 66, temp: 66, humi: 66 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 67, temp: 67, humi: 67 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 68, temp: 68, humi: 68 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 69, temp: 69, humi: 69 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 70, temp: 70, humi: 70 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 71, temp: 71, humi: 71 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 72, temp: 72, humi: 72 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 73, temp: 73, humi: 73 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 74, temp: 74, humi: 74 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 75, temp: 75, humi: 75 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 76, temp: 76, humi: 76 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 77, temp: 77, humi: 77 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 78, temp: 78, humi: 78 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 79, temp: 79, humi: 79 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 80, temp: 80, humi: 80 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 81, temp: 81, humi: 81 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 82, temp: 82, humi: 82 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 83, temp: 83, humi: 83 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 84, temp: 84, humi: 84 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 85, temp: 85, humi: 85 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 86, temp: 86, humi: 86 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 87, temp: 87, humi: 87 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 88, temp: 88, humi: 88 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 89, temp: 89, humi: 89 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 90, temp: 90, humi: 90 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 91, temp: 91, humi: 91 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 92, temp: 92, humi: 92 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 93, temp: 93, humi: 93 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 94, temp: 94, humi: 94 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 95, temp: 95, humi: 95 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 96, temp: 96, humi: 96 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 97, temp: 97, humi: 97 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 98, temp: 98, humi: 98 [FlashDB][sample][tsdb] =========================================================== [FlashDB][sample][kvdb][basic] ==================== kvdb_basic_sample ==================== [FlashDB][sample][kvdb][basic] get the 'boot_count' value is 98 [FlashDB][sample][kvdb][basic] set the 'boot_count' value to 99 [FlashDB][sample][kvdb][basic] =========================================================== [FlashDB][sample][tsdb] ==================== tsdb_sample ==================== [FlashDB][sample][tsdb] append the new status.temp (99) and status.humi (99) [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 50, temp: 50, humi: 50 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 51, temp: 51, humi: 51 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 52, temp: 52, humi: 52 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 53, temp: 53, humi: 53 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 54, temp: 54, humi: 54 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 55, temp: 55, humi: 55 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 56, temp: 56, humi: 56 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 57, temp: 57, humi: 57 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 58, temp: 58, humi: 58 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 59, temp: 59, humi: 59 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 60, temp: 60, humi: 60 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 61, temp: 61, humi: 61 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 62, temp: 62, humi: 62 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 63, temp: 63, humi: 63 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 64, temp: 64, humi: 64 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 65, temp: 65, humi: 65 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 66, temp: 66, humi: 66 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 67, temp: 67, humi: 67 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 68, temp: 68, humi: 68 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 69, temp: 69, humi: 69 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 70, temp: 70, humi: 70 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 71, temp: 71, humi: 71 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 72, temp: 72, humi: 72 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 73, temp: 73, humi: 73 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 74, temp: 74, humi: 74 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 75, temp: 75, humi: 75 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 76, temp: 76, humi: 76 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 77, temp: 77, humi: 77 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 78, temp: 78, humi: 78 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 79, temp: 79, humi: 79 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 80, temp: 80, humi: 80 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 81, temp: 81, humi: 81 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 82, temp: 82, humi: 82 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 83, temp: 83, humi: 83 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 84, temp: 84, humi: 84 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 85, temp: 85, humi: 85 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 86, temp: 86, humi: 86 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 87, temp: 87, humi: 87 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 88, temp: 88, humi: 88 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 89, temp: 89, humi: 89 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 90, temp: 90, humi: 90 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 91, temp: 91, humi: 91 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 92, temp: 92, humi: 92 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 93, temp: 93, humi: 93 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 94, temp: 94, humi: 94 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 95, temp: 95, humi: 95 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 96, temp: 96, humi: 96 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 97, temp: 97, humi: 97 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 98, temp: 98, humi: 98 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 99, temp: 99, humi: 99 [FlashDB][sample][tsdb] =========================================================== [FlashDB][sample][kvdb][basic] ==================== kvdb_basic_sample ==================== [FlashDB][sample][kvdb][basic] get the 'boot_count' value is 99 [FlashDB][sample][kvdb][basic] set the 'boot_count' value to 100 [FlashDB][sample][kvdb][basic] =========================================================== [FlashDB][sample][tsdb] ==================== tsdb_sample ==================== [FlashDB][sample][tsdb] append the new status.temp (100) and status.humi (100) [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 50, temp: 50, humi: 50 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 51, temp: 51, humi: 51 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 52, temp: 52, humi: 52

biqi2 commented 8 months ago

用API函数fdb_tsdb_control禁止ts数据库覆盖后发现在4K字节的TS分区的情况下确实只能容纳98条记录,因此重新分析fdb数据记录格式,发现: 每个扇区的扇区头结构体(sector_hdr_data)大小为80字节,每条数据的数据头结构体(log_idx_data)大小为32字节,因此 整个TSdb分区可以储存TS记录的数量 = (分区大小 - 扇区数*80) / (32 + 每条记录的数据对应的大小 ),由这个公式可计算对应大小TSdb分区所能包含的记录的条数,于是有了下面我的这个记录表格。由表格记录可见随着TSdb分区的增大,每多增加10K字节就会发生TS记录减少1条的情况(我的每条记录数据大小为8字节),推测可能TSdb分区每多10K产生了额外的空间占用(没有详细去分析源码了),或者我上面的公式不够精确? image

turelon commented 4 months ago

用API函数fdb_tsdb_control禁止ts数据库覆盖后发现在4K字节的TS分区的情况下确实只能容纳98条记录,因此重新分析fdb数据记录格式,发现: 每个扇区的扇区头结构体(sector_hdr_data)大小为80字节,每条数据的数据头结构体(log_idx_data)大小为32字节,因此 整个TSdb分区可以储存TS记录的数量 = (分区大小 - 扇区数*80) / (32 + 每条记录的数据对应的大小 ),由这个公式可计算对应大小TSdb分区所能包含的记录的条数,于是有了下面我的这个记录表格。由表格记录可见随着TSdb分区的增大,每多增加10K字节就会发生TS记录减少1条的情况(我的每条记录数据大小为8字节),推测可能TSdb分区每多10K产生了额外的空间占用(没有详细去分析源码了),或者我上面的公式不够精确? image

你这表格计算有问题,记录条数应该取整,按照你的公式,每个扇区可以存储的条数为49.2,取整为49。否则0.2的小数累计下来就会多出来