Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
biqi2 opened this issue Jan 10, 2024 · 2 comments

Comments

@biqi2
Copy link

biqi2 commented Jan 10, 2024

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
Copy link
Author

biqi2 commented Jan 12, 2024

用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
Copy link

turelon commented May 16, 2024

用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的小数累计下来就会多出来

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants