Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >查询InfluxDB最后一点

查询InfluxDB最后一点
EN

Stack Overflow用户
提问于 2021-08-02 01:09:51
回答 1查看 726关注 0票数 0

我使用c++库进水cxx cxx,它使用curl将数据插入到数据库中。在我的c++程序中,我将编写4个测量值,每个测量值都有几十个点每秒插入。我使用UDP发送数据。

代码语言:javascript
运行
AI代码解释
复制
sensor_->influxdb_ = influxdb::InfluxDBFactory::Get("udp://localhost:8089?db=udp");

插入的c++代码之一看起来:

代码语言:javascript
运行
AI代码解释
复制
sensor_->influxdb_->write(influxdb::Point("/controller/data")
                                           .addField("angular", sensor_->angular())
                                           .addField("speed_left_rear", sensor_->speedl()
                                           .addField("speed_right_rear", sensor_->speedr()
                                           .addField("voltage", sensor_->voltage()));

它将插入一个测量点“/控制器/数据”。这一点有四个字段,没有标签。

当我在数据库的最后半秒钟中查询数据时,就会出现问题。我打开一个终端然后进入

代码语言:javascript
运行
AI代码解释
复制
influx
use udp
create retention policy "1h" on udp duration 1h replication 1 shard duration 1h default
precision rfc3339
SELECT * FROM "udp".."/controller/data" WHERE time >= now() - 500ms

预期行为:i可以在最后半秒钟内获得点数,所有字段都不是空的,同一行中的数据具有相同的时间戳。实际行为:有时为null。例如:

代码语言:javascript
运行
AI代码解释
复制
> SELECT * FROM "udp".."/controller/data" WHERE time >= now() - 500ms
name: /controller/data
time                           angular speed_left_rear speed_right_rear voltage
----                           ------- --------------- ---------------- -------
2021-08-02T08:47:41.17175053Z  99      0               0                23152
2021-08-02T08:47:41.189857794Z -49     0               0                23152
2021-08-02T08:47:41.203743539Z 282     0               0                23152
2021-08-02T08:47:41.219689002Z 299     0               0                23152
2021-08-02T08:47:41.235739755Z 249     0               0                23223
2021-08-02T08:47:41.251701843Z 299     0               0                23311
2021-08-02T08:47:41.267655473Z 133     0               0                23311
2021-08-02T08:47:41.284691461Z 382     0               0                23311
2021-08-02T08:47:41.299605898Z 116     0               0                23240
2021-08-02T08:47:41.315760775Z                                          23240
2021-08-02T08:47:41.331771862Z                                          23240
2021-08-02T08:47:41.347798407Z                                          23240
2021-08-02T08:47:41.363746204Z                                          23364
2021-08-02T08:47:41.380132952Z                                          23364
2021-08-02T08:47:41.395660171Z                                          23364
2021-08-02T08:47:41.411623426Z                                          23364
2021-08-02T08:47:41.427676221Z                                          23241
2021-08-02T08:47:41.443633642Z                                          23241
2021-08-02T08:47:41.459634521Z                                          23241
2021-08-02T08:47:41.475580859Z                                          23241
2021-08-02T08:47:41.491627529Z                                          23400
2021-08-02T08:47:41.507684407Z                                          23400
2021-08-02T08:47:41.523670412Z                                          23400
2021-08-02T08:47:41.539542668Z                                          23400
2021-08-02T08:47:41.556554739Z                                          23400
2021-08-02T08:47:41.571867004Z                                          23329
2021-08-02T08:47:41.587669261Z                                          23329
2021-08-02T08:47:41.603685306Z                                          23329
2021-08-02T08:47:41.619762893Z                                          23329
2021-08-02T08:47:41.636273305Z                                          23293
2021-08-02T08:47:41.651680944Z                                          23293
2021-08-02T08:47:41.667774571Z                                          23293
2021-08-02T08:47:41.683901448Z                                          23293
2021-08-02T08:47:41.699780996Z                                          23417
2021-08-02T08:47:41.715881623Z                                          23417
2021-08-02T08:47:41.732012Z                                             23417
2021-08-02T08:47:41.747715092Z                                          23417
2021-08-02T08:47:41.763705763Z                                          23205
2021-08-02T08:47:41.779796182Z                                          23205
2021-08-02T08:47:41.795692354Z                                          23205

代码语言:javascript
运行
AI代码解释
复制
> SELECT * FROM "udp".."/controller/data" WHERE time >= now() - 500ms
name: /controller/data
time                           angular speed_left_rear speed_right_rear voltage
----                           ------- --------------- ---------------- -------
2021-08-02T08:49:30.314298081Z 649     0               0                23293
2021-08-02T08:49:30.330174725Z 316     0               0                23293
2021-08-02T08:49:30.346282365Z 798     0               0                23187
2021-08-02T08:49:30.362351798Z 732     0               0                23187
2021-08-02T08:49:30.378310691Z 282     0               0                23187
2021-08-02T08:49:30.39422Z     549     0               0                23293
2021-08-02T08:49:30.410205143Z 615     0               0                23329
2021-08-02T08:49:30.42628595Z  149     0               0                23329
2021-08-02T08:49:30.442316883Z 282     0               0                23329
2021-08-02T08:49:30.45822561Z  582     0               0                23329
2021-08-02T08:49:30.474172836Z 133     0               0                23364
2021-08-02T08:49:30.490214269Z 233     0               0                23364
2021-08-02T08:49:30.506210203Z 549     0               0                23364
2021-08-02T08:49:30.522200303Z -399    0               0                23364
2021-08-02T08:49:30.538234736Z -366    0               0                23364
2021-08-02T08:49:30.554288127Z                         0                23364
2021-08-02T08:49:30.570351727Z                         0                23364
2021-08-02T08:49:30.586195413Z                         0                23364
2021-08-02T08:49:30.602191055Z                         0                23241
2021-08-02T08:49:30.618195155Z                         0                23241
2021-08-02T08:49:30.634950578Z                         0                23241
2021-08-02T08:49:30.650237772Z                         0                23223
2021-08-02T08:49:30.666386828Z                         0                23276
2021-08-02T08:49:30.682325013Z                         0                23276
2021-08-02T08:49:30.698237823Z                         0                23276
2021-08-02T08:49:30.714291797Z                         0                23276
2021-08-02T08:49:30.730265564Z                         0                23099
2021-08-02T08:49:30.746241957Z                         0                23099
2021-08-02T08:49:30.762230307Z                         0                23099
2021-08-02T08:49:30.778286615Z                         0                23099
2021-08-02T08:49:30.794283132Z                         0                22993
2021-08-02T08:49:30.819896051Z                         0                23134
2021-08-02T08:49:30.826242917Z                         0                23134
2021-08-02T08:49:30.84235989Z                          0                23134
2021-08-02T08:49:30.86443611Z                          0                23134
2021-08-02T08:49:30.874357007Z                         0                23170
2021-08-02T08:49:30.890441315Z                         0                23170
2021-08-02T08:49:30.906395249Z                         0                23170
2021-08-02T08:49:30.922352392Z                         0                23170
2021-08-02T08:49:30.942798927Z                         0                23187
2021-08-02T08:49:30.954241427Z                         0                23187
2021-08-02T08:49:30.970329818Z                         0                23187
2021-08-02T08:49:30.986202379Z                         0                23240
2021-08-02T08:49:31.002118397Z                         0                23046
2021-08-02T08:49:31.018028873Z                         0                23046
2021-08-02T08:49:31.034310053Z                         0                23046

如您所见,有许多空值。左列更有可能为空,而字段键voltage的最右边列从来没有空值。

因此,我猜:同一行中的字段值对应于相同的时间戳,但它们不是同时写入数据库的,有些可能是写入的,而另一些则不是。是那么回事吗?

如果有一种方法让不同的字段在相同的raw中同时写入?,所以当我查询同一行中的每个字段时,都不是null。

或者如何查询最近一个所有字段都不是空的点?我实际上想查询度量中的最后一点:select * from "udp".."/controller/data" order by time desc limit 1,但是有时它会返回一个带空值的字段的点。

我发现last()帮不了我的忙。因为如果我使用SELECT last(*) FROM "udp".."/controller" WHERE time > now() - 1s(我使用WHERE子句,因为我认为它可以通过指定一个时间范围让它查询得更快),它只是将来自last(angular)last(speed_left_rear)last(speed_right_rear)last(voltage)的结果合并到一个点上。但是,字段值可能不会对相同的时间戳作出共同响应。

环境信息:

我所有这些程序都是在一个类似于raspberryPi的嵌入装置纳米粒子上运行的。

  • 系统信息:Linux4.4.179 aarch64
  • InfluxDB版本: 1.8.7

Config: my influx.conf

代码语言:javascript
运行
AI代码解释
复制
[[udp]]
  enabled = true
  batch-size = 50
  batch-pending = 5
  batch-timeout = "1s"

我试着修改UDP批处理大小,看看它是否有任何不同:

如果我在influxdb.conf中将批处理大小修改为1

代码语言:javascript
运行
AI代码解释
复制
[[udp]]
  enabled = true
  batch-size = 1
  batch-pending = 5
  batch-timeout = "1s"

它会增加大量的CPU负载,而我只能得到时间>现在-22秒的点。

代码语言:javascript
运行
AI代码解释
复制
select * from "udp".."/controller/data" where time >= now() - 22s

并返回以下结果:

代码语言:javascript
运行
AI代码解释
复制
> SELECT * FROM "udp".."/controller/data" WHERE time >= now() - 21s
name: /controller/data
time                angular speed_left_rear speed_right_rear voltage
----                ------- --------------- ---------------- -------
1627894525069581596 599     0               0                23276
1627894525115397757 366     0               0                23116
1627894525147390263 782     0               0                23258
1627894525163375140 216     0               0                23258
1627894525179457142 449     0               0                23258
1627894525211368273 249     0               0                23382
1627894525227548857 532     0               0                23382
1627894525259374239 133     0               0                23382
1627894525275378367 249     0               0                23169
1627894525307387789 665     0               0                23169
1627894525323413499 499     0               0                23169
1627894525355366338 599     0               0                23311
1627894525371388841 382     0               0                23311
1627894525387508467 499     0               0                23311
1627894525403456887 1148    0               0                23223
1627894525420205921 549     0               0                23205
1627894525436119925 149     0               0                23205
1627894525452726045 366     0               0                23205
1627894525468630132 183     0               0                23223
1627894525484748008 -99     0               0                23223
1627894525500814260 249     0               0                23223
1627894525516629098 499     0               0                23223
1627894525533157344 848     0               0                23205
1627894525548644353 366     0               0                23205
1627894525564793437 16      0               0                23205
1627894525627496298 66      0               0                23347
1627894525675488264 83      0               0                23240
1627894525723471189 -33     0               0                23418
1627894525755489652 166     0               0                23418
1627894525772796929 332     0               0                23418
1627894525803355328                                          23152

它有时仍然返回一个空值。因此,更改批处理大小不适用于这个问题,而且似乎批处理大小是一个列的属性,它会打包一定数量的列数据,然后写入数据库。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-11 08:22:26

我不会使用InfluxDB来处理来自最后500 to的数据。这个软件不适合这样的解决方案。InfluxDB没有优先级将所有值放在定义的时间内。这不是一个实时系统。如果你需要这样的东西,我建议PLC类型的设备,是实时的。但是..。如果您想这么多地使用它,我可以建议采用以下棘手的解决方案:

  1. 请求不更新的数据,例如400 is:

从“udp”.“/控制器/数据”中选择time >= now() -10 s和time<=now()-400 10s中的最后(*)

假设在400 in之后,您在所有字段中都有值。3)要求有安全延迟的数据,例如500毫秒:

从“udp”.“/控制器/数据”中选择time >= now() -500 now中的第一个(*)

从现在开始,以上查询应该在500 now之前给出第一个值。假设在略低于500 is的情况下,需要编写所有字段值。

  1. 使用where为所有值字段请求数据,如果只有数据,则总是正确的:

从“udp”.“/控制器/数据”中选择时间>= now() - 5s和“转角”>-9999999和"speed_left_rear">-9999999和“speed_right_rear”>-9999999“和”电压“的限制为1的*

以上假设您不能读取低于-9999999的值。通过这种方式,您应该只接收包含所有值且不大于5s的系列。您将得到的值是最新的,具有与所编写的所有值相同的时间戳。

  1. 2)解决方案在某些假定延迟的情况下可以工作,也可以不工作(取决于系统工作负载等)。3)如果您需要具有相同时间戳的值,则可能是最好的解决方案。
  2. 另一种方法是进行4个独立的查询,在其中查询最后一个值:

从“udp”.“/控制器/数据”选择最后(Speed_left_rear)从“udp”.“/控制器/数据”从“udp”中选择最后一次(Speed_right_rear).“/控制器/数据”从“udp”中选择最后(电压)

  1. 甚至在子查询中请求它:

选择* FROM (选择最后(角)作为“角”从“udp”.“/控制器/数据”选择最后(Speed_left_rear)为"speed_left_rear“从”udp“.”/控制器/数据“选择最后(Speed_right_rear)为"speed_right_rear”,(从“udp”选择最后(电压)为“电压”.“/控制器/数据”)

它会给出最新的值,但它们可能没有相同的时间戳。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68619027

复制
相关文章
如何查询InfluxDB
InfluxDB是一个很流行的基于时间序列的数据库,下面是这个数据库的最基本的查询命令。InfluxDB使用类SQL(实际上它就是一种特殊的“SQL”)的语言。
大数据弄潮儿
2018/05/21
11.4K1
「influxDB 原理与实践(二)」详解influxDB的写入与查询
RESTful风格的接口,返回JSON格式的响应数据,并支持身份认证、JWT令牌、丰富的HTTP响应代码等。 influxDB API接口及接口的定义描述如下图所示:
源码之路
2020/09/04
8.2K0
「influxDB 原理与实践(二)」详解influxDB的写入与查询
InfluxDB使用HTTP的API查询数据
HTTP API是在InfluxDB中查询数据的主要方法(有关查询数据库的其他方法,请参阅命令行界面和客户端库)。
Devops海洋的渔夫
2019/05/31
3.7K0
「influxDB 原理与实践(三)」连续查询
通过创建连续查询,用户可以指定InfluxDB执行连续查询的时间间隔、单次查询的时间范围以及查询规则。InfluxDB会根据用户指定的规则,定期的将过去一段时间内的原始时序数据以用户所期望的方式保存至新的结果表中,从而降低存储数据的时间精度,大大减少新表的数据量。同时,将查询结果保存在指定的数据表中,也便于用户直接查询所关心的内容,从而降低查询的运算复杂度,提升查询效率。
源码之路
2020/09/04
2.9K0
「influxDB 原理与实践(三)」连续查询
MySQL 查询最后分区
用户1148526
2023/10/14
3180
InfluxDB常见问题和解答 - 如何在InfluxDB中实现嵌套子查询
大多数InfluxQL的内置函数不支持函数的嵌套,可以借助连续查询来实现类似的功能,先通过连续查询做实现子查询功能,把结果保存到新表中,然后再对新表中的结果执行查询。
hanj4096
2019/11/25
4K0
InfluxDB常见问题和解答 - 如何在InfluxDB中实现嵌套子查询
复杂一点的查询
一:inner join inner join   是在做排除,如果任一行在两个表中不匹配,则注定将从最终的结果中排除掉 例子1:select * from employee e inner join employee m on e.managerid = m.employeeid 这是从一个表里查询了两次 得到的一行记录将包括两个employee的信息  前面的是经理  后面的是打工的 注意from哪个表  哪个表的信息就在前面 其中e和m分别是表的别名,这里的别名和列的别名不同,不用写as
liulun
2022/05/08
6130
4. InfluxDB使用HTTP的API查询数据
使用HTTP API查询数据https://docs.influxdata.com/influxdb/v1.7/guides/querying_data/
Devops海洋的渔夫
2022/01/14
1.2K0
InfluxDB
另外,InfluxDB也提供了多个可能需要自定义端口的插件,所以的端口映射都可以通过配置文件修改,对于默认安装的InfluxDB,这个配置文件位于/influxdb/influxdb.conf。
框架师
2021/03/05
1.5K0
influxdb使用
插入数据(python接口) data = "mycomputer,uuser=yzh cpu={}".format(cpu) async with session.post("http://loca
超级大猪
2019/11/22
1.1K0
influxdb使用
influxdb 学习
数据点包括time(一个时间戳),measurement(例如cpu_load),至少一个k-v格式的field(也即指标的数值例如 “value=0.64”或者“temperature=21.2”),零个或多个tag,其一般是对于这个指标值的元数据(例如“host=server01”, “region=EMEA”, “dc=Frankfurt)。
solate
2019/07/22
2.7K0
Install InfluxDB
这两方面的特性 Elasticsearch 也有覆盖,那它们两者的区别是什么呢,可以参考下面的文章
franket
2021/08/11
9750
Influxdb 编译
编译针对当前 github上influxdb的master代码 其实github上的CONTRIBUTING.md 里已经说的很明白,按其一步步来开即开,唯一遇到的问题可能就是下载依赖时被墙无法下载,下文给了解决方案; 我们按CONTRIBUTING.md 上的步骤再来梳理一下 安装golang 1.11, 最新版 Influxdb编译要求golang 1.11的支持,这个大家各显神通吧,安装好后设置好你的GOPATH; 安装Dep, 这个用来下载编译依赖用,针对被墙的依赖,这个并没有什么用; go
扫帚的影子
2018/12/07
1.3K0
Influxdb + Chronograf
官方最新版本下载地址: [https://portal.influxdata.com/downloads/%5D
用户10325771
2023/03/01
8810
InfluxDB 3.0简介:InfluxDB IOx的演变
InfluxDB 3.0 现在是当前和未来所有 InfluxDB 产品的基础,首次为 InfluxDB 平台带来了高性能、无限基数、SQL 支持和低成本对象存储。InfluxDB 3.0 在 Rust 中作为列式数据库开发,在单个数据存储中引入了对各种时间序列数据(指标、事件和跟踪)的支持,以支持依赖于高基数时间序列数据的可观测性、实时分析和 IoT/IIoT 用例。
gemron的空间
2023/05/02
6.3K0
InfluxDB 3.0简介:InfluxDB IOx的演变
InfluxDB从原理到实战 - 什么是InfluxDB
InfluxDB是一个由InfluxData开发的开源时序型数据库,专注于海量时序数据的高性能读、高性能写、高效存储与实时分析等,在DB-Engines Ranking时序型数据库排行榜上排名第一,广泛应用于DevOps监控、IoT监控、实时分析等场景。
hanj4096
2019/08/27
5.8K0
InfluxDB从原理到实战 - 什么是InfluxDB
InfluxDB Cluster - InfluxDB Enterprise 集群的开源替代方案
InfluxDB Cluster - 一个开源分布式时间序列数据库,InfluxDB Enterprise 的开源替代方案
奇小在
2022/10/22
2.6K0
influxDB 常用操作
在influxDB的CLI界面执行precision rfc3339即可,但是显示是UTC的时区,与中国时区差了8个小时,需要在查询语句的最后加上tz('Asia/Shanghai'),这样查询的时间才是纠正为中国时区显示。
Devops海洋的渔夫
2019/05/31
2.1K0
InfluxDB关键概念
前一篇根据InfluxDB的官方开源文档进行了一次实践。这篇来继续看看InfluxDB的关键概念。
Devops海洋的渔夫
2019/06/02
6390
influxdb基础入门
influxdb的单机版是开源的,而集群版是商业版,influxdb被设计运行在SSD上,如果使用机器或者网络磁盘作为存储介质,会导致性能下降至少一个数量级。influxdb支持restful api,同时也支持https,为了保证安全性,非局域网建议使用https与Influxdb进行通信。
luoxn28
2020/02/17
1.3K0
influxdb基础入门

相似问题

InfluxDB sum最后一点

135

InfluxDB流量查询每组最后一条记录

111

InfluxDB查询错误

22

influxDB查询速度

15

InfluxDB -只获取查询中的最后一个值

70
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档