influxdb 查询
InfluxDB是一个流行的时间序列数据库,我在这里向您展示如何查询它。 它使用类似SQL的语言(或者说老实说,是“几乎是SQL”)。
SELECT * FROM "foodships" WHERE time > now() - 1h
从第一天开始,这种语言就已经在InfluxDB中工作并得到了支持,它既有优点也有缺点:
- 新用户可以轻松地以他们已经知道的语言与数据库进行交互。 SQL很流行,许多开发人员已经知道它。 该查询语法帮助InfluxDB在早期发展起来。
- 如前所述,InfluxQL是一种“ amost-SQL”语言。 编写SQL查询语言并非易事。 一个问题是DBA对SQL有一些期望,但是我们的语言与SQL不完全兼容。 这造成了许多不匹配和怀疑 。
- 时间序列数据库的特征之一是写操作不能阻止读取,而读操作不能阻止写入。 这是必须的。 您的IOT设备或服务器将始终写入指标,同时,您的仪表板,分析工具和警报管理器将从数据库中读取数据。 InfluxDB需要更具可扩展性的东西。
- 目前,存储引擎和查询语言在同一个项目中,这阻止了我们想要的代码的快速迭代。 与存储引擎相比,查询语言的发展要快得多。 引擎需要稳定性,但是查询语言需要更多的功能和功能。
- InfluxQL需要重新架构,因为该团队无法实施社区所需的所有出色创意。
- 当前,SQL非常简单易学,但是我们的堆栈中还有另一种DSL:Kapacitor使用的TICK脚本发送警报并减少系列采样。
- InfluxQL没有数学功能,因为该语言不允许我们以简单的方式添加它们。 使用IFQL,它们将非常易于实现。
在旧金山的InfluxDays期间, InfluxData的首席技术官兼创始人Paul Dix在舞台上发布了一种新的开源查询语言,以使数据分析更接近InfluxDB。 它称为IFQL 。
建筑
var cpu = select(db: "telegraf")
.filter(exp:{"_measurement" == "cpu" and "_field" == "usage_user"})
.range(start: -30m)
select(db: "telegraf")
.filter(exp:{"_measurement" == "mem" and "_field" == "used_percent"})
.range(start: -30m)
.join(on:["host"], eval:{$ + cpu})
IFQL不仅是一种查询语言。 它具有一个解析器,该解析器读取上述查询,并生成可以可视化为JSON并直接通过IFQL运行的计划。 这意味着您所看到的语法只是可能的实现之一。 真正的合同在计划和处理者之间。
该项目的架构和想法将使我们能够在IFQL AST之上重新实现InfluxQL和PromQL,TICK脚本。 除此之外,如果您有查询生成器,或者需要创建自定义实现与In