嵌入式技术william hill官网
直播中

刘伟

7年用户 1663经验值
私信 关注
[问答]

flashDB TSDB数据库插入数据时报错如何解决?

flashDB TSDB的get_time函数时返回的系统时间戳,在使用中出现我偶然错误的将RTC时间设置得比现在的时间要大很多,后面再次校时后RTC时间后的时间要比之前设置的时间要小,在插入数据时报错误提示最后一次插入数据的时间戳要比现在的时间戳大直接return错误了,我的想法是不需要考虑这个插入的时间戳大小,但是又不太了解flashDB数据库的机制,如果直接注释掉判断最后一次插入时的时间戳与当前插入时间戳大小会不会造成其他问题,或者出现这种情况有没有其他方法去解决。
设置数据库获取时间戳函数:
2.jpg
报错的函数段:
2.jpg

回帖(4)

王敏

2023-2-9 11:39:44
它是不是根据这个时间进行索引了。如果时间不是递增的可能出现搜索失败。
不过,把时间换掉,用个整型值代替应该也能工作
再进一步搜索一下 last_time cur_time 这俩变量有没有参与其它功能特性。如果不重要,个人建议可以用 counts 代替时间。
举报

刘伟

2023-2-9 11:39:52
我觉得这个只是个索引列,不太适合用时间戳来实现,提供的fdb_tsl_iter_by_time函数名称就不是很恰当,我是打算通过这个函数来快速提取所需时间段的数据,这样的话我还是得将时间戳放在存入的数据结构体中,遍历所有的数据的时候判断时间戳是否是我所要的区间
举报

王敏

2023-2-9 11:39:59
用时间戳当索引难免出现同时添加两条的需求,出现俩相同索引的结果。
用32位无符号整型值能表达的条数更多。也能更有序,但是如果断电了怎么接着上一次的索引就是个问题了。
举报

刘伟

2023-2-9 11:40:06
用32位无符号整型值在重新上电初始化时会从flash中读取到db->last_time,再去给这个32位无符号整型值赋db->last_time作为初始值,这样是不会出现与时间戳相同的问题,但是如果用时间戳这样是不行的,因为时间戳存在校时错误,而且时间戳也不能跟32位无符号整型值一样初始化时将db->last_time作为初始值。
初始化时的代码段:
2.jpg
举报

更多回帖

发帖
×
20
完善资料,
赚取积分