Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
flashDB
FlashDB的TSDB数据查询问题
发布于 2021-12-26 07:39:22 浏览:1929
订阅该版
我现在有一个项目需要分页显示数据,比如查询到2021-12-1 0:0:0至2021-12-31 23:59:59之间有1000条数据,可是我每页只能显示10条数据,这种情况下怎么查询1-10条数据呢,因为第10条数据的时间是不确定的,如果下一页就是11-20条数据,同理我可以记录第10条的时间戳,但是不知道第20条的时间戳,结束时间点就无法确定,如果是上一页就要从11条数据往前查10条,这种情况怎么实现呢?
查看更多
2
个回答
默认排序
按发布时间排序
chenls
2021-12-30
这家伙很懒,什么也没写!
可以使用这个接口的回调函数,回调函数需要自行封装。 ```c /** * The TSDB iterator for each TSL by timestamp. * * @param db database object * @param from starting timestap * @param to ending timestap * @param cb callback * @param arg callback argument */ void fdb_tsl_iter_by_time(fdb_tsdb_t db, fdb_time_t from, fdb_time_t to, fdb_tsl_cb cb, void *cb_arg) { struct tsdb_sec_info sector; uint32_t sec_addr, oldest_addr = db->oldest_addr, traversed_len = 0; struct fdb_tsl tsl; bool found_start_tsl = false; if (!db_init_ok(db)) { FDB_INFO("Error: TSL (%s) isn't initialize OK.\n", db_name(db)); } // FDB_INFO("from %s", ctime((const time_t * )&from)); // FDB_INFO("to %s", ctime((const time_t * )&to)); if (cb == NULL) { return; } sec_addr = oldest_addr; /* search all sectors */ do { if (read_sector_info(db, sec_addr, §or, false) != FDB_NO_ERR) { continue; } /* sector has TSL */ if ((sector.status == FDB_SECTOR_STORE_USING || sector.status == FDB_SECTOR_STORE_FULL)) { if (sector.status == FDB_SECTOR_STORE_USING) { /* copy the current using sector status */ sector = db->cur_sec; } if ((!found_start_tsl && ((from >= sector.start_time && from <= sector.end_time) || (sec_addr == oldest_addr && from <= sector.start_time))) || (found_start_tsl)) { uint32_t start = sector.addr + SECTOR_HDR_DATA_SIZE, end = sector.end_idx; found_start_tsl = true; /* search start TSL address, using binary search algorithm */ while (start <= end) { tsl.addr.index = start + ((end - start) / 2 + 1) / LOG_IDX_DATA_SIZE * LOG_IDX_DATA_SIZE; read_tsl(db, &tsl); if (tsl.time < from) { start = tsl.addr.index + LOG_IDX_DATA_SIZE; } else { end = tsl.addr.index - LOG_IDX_DATA_SIZE; } } tsl.addr.index = start; /* search all TSL */ do { read_tsl(db, &tsl); if (tsl.time >= from && tsl.time <= to) { /* iterator is interrupted when callback return true */ if (cb(&tsl, cb_arg)) { return; } } else { return; } } while ((tsl.addr.index = get_next_tsl_addr(§or, &tsl)) != FAILED_ADDR); } } else if (sector.status == FDB_SECTOR_STORE_EMPTY) { return; } traversed_len += db_sec_size(db); } while ((sec_addr = get_next_sector_addr(db, §or, traversed_len)) != FAILED_ADDR); } ```
刺刺赐
2021-12-26
大家吃好喝好
显示前先遍历一遍所有的数据,遍历时用自定义的数据结构(比如链表)把显示第n(n从0开始)页所需的数据(第(n*10+1)条和第((n+1)*10)条的时间戳)记录下来,这样显示某一页时时间就能确定了。
撰写答案
登录
注册新账号
关注者
0
被浏览
1.9k
关于作者
lastliudexi
这家伙很懒,什么也没写!
提问
1
回答
0
被采纳
0
关注TA
发私信
相关问题
1
flashDB有两个变量未定义?
2
FlashDB 初始化时出现 check failed
3
FlashDB初始化isn't initialize OK
4
FlashDB在哪里修改版本号实现自动更新?
5
flashDB重复更新同一个参数的问题
6
flashDB kv ts 最大存储字节在哪里设置
7
操作flashDB时thread 提示error -2 超时
8
flashdb 断言错误问题求解
9
FlashDB没法选择版本
10
flashdb出现moved kv日志后,再去查询发现数据有丢失
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
rt-smart启动流程分析
2
EtherKit快速上手PROFINET
3
RTThread USB转串口无法接收数据
4
HC32F4A0 SD卡挂载及热插拔的实现
5
vscode插件 - RT-Thread Studio项目助手 | 跨平台开发
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
cubemx
PWM
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
812
个答案
177
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
149
次被采纳
本月文章贡献
出出啊
1
篇文章
2
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部