You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MongoDB中获取限定数量数据 实现传感器海量数据分页查询

10亿级传感器时序数据分页查询实现方案

功能实现逻辑

首先避免使用传统OFFSET分页,10亿级数据下大偏移量查询会扫描大量前置无效数据,性能极差,推荐使用**游标分页(Keyset Pagination)**方案:

  • get 1(首次查询)逻辑:
    直接按时间排序取前1000条,同时记录返回结果中最后一条数据的时间戳(如果存在相同时间戳数据,额外记录最后一条的自增主键ID作为联合游标):
    SELECT * FROM sensor_table ORDER BY ts DESC, id DESC LIMIT 1000;
    
    服务端暂存本次返回最后一条的last_ts和last_id值。
  • get 2及后续分页查询逻辑:
    携带上一页记录的游标值作为过滤条件,无需跳过前置数据,直接定位到下一页起始位置:
    SELECT * FROM sensor_table WHERE ts < ${last_ts} OR (ts = ${last_ts} AND id < ${last_id}) ORDER BY ts DESC, id DESC LIMIT 1000;
    
    查询完成后更新服务端暂存的last_ts和last_id即可。

性能优化建议

  • 索引优化:为ts + id建立联合聚集索引,所有分页查询可直接走索引无需回表,查询延迟稳定在毫秒级,翻到任意页数性能无衰减。
  • 分片优化:10亿级数据建议按时间维度做水平分片,例如按月/周分片,查询时自动路由到对应分片,避免扫描全库数据。
  • 存储选型:如果当前使用的是普通关系型数据库,可迁移到时序专用数据库(如TimescaleDB、TDengine、InfluxDB),这类数据库天生针对时序数据排序、分页场景做了底层优化,同等配置下查询性能可提升5~20倍。

单条记录格式参考

记录格式示例

内容的提问来源于stack exchange,提问作者The blank

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 15:06:03