InfluxDB是一个很流行的基于时间序列的数据库,下面是这个数据库的最基本的查询命令。InfluxDB使用类SQL(实际上它就是一种特殊的“SQL”)的语言。 这种查询语法对InfluxDB的早期发展很有帮助。 正如我之前所说的,InfluxQL是一种“类SQL”的语言。编写SQL查询语言不是一件简单的工作。 InfluxDB需要更好的可扩展性。 如果相同时刻存储引擎和查询语言都在同一个项目中,这会阻碍我们想要的代码的快速迭代功能。与存储引擎相比,查询语言更快地优化。 在旧金山的InfluxDays期间,InfluxData的首席技术官兼创始人Paul Dix发布了一种新的开源查询语言,其数据分析与InfluxDB很接近。我们称之为IFQL。 除此之外,如果你有你的查询构建器或者你需要创建一个自定义的实现来与InfluxDB交互,你可以简单地将JSON推送到IFQL。这的确很令人很意外。
3.查询 支持类sql的语法进行数据查询,简称influxQL。 根据用户指定的标签或者时间间隔对查询结果数据进行分组。 3.9 时间语法 作为时序数据库, 支持丰富的时间计算、时间查询、时间分组等操作。 时间语法支持绝对时间和相对时间。 返回value最大的4个值 select TOP(value,4) from cpu_usage 3.13通过API查询数据 InfluxDB API接口是生产环境中常用的查询方式,通过发送一个GET 请求/query路径,并设置URL的db参数为目标数据库,设置URL参数q为查询语句 ?
一键领取预热专享618元代金券,2核2G云服务器爆品秒杀低至18元!云产品首单低0.8折起,企业用户购买域名1元起…
前言 这里强烈建议先熟悉influxsql的查询语句,可参考 Data exploration using InfluxQL 关于Select查询请求结果涉及到的一些数据结构 Series 定义 type Values []interface{} } Row表示查询结果集中的每一行, 其中的Values表示是返回的Fields的集合 Iterator bufFloatIterator 定义 type bufFloatIterator return p, nil } } floatFillIterator 运行在select中的Group by time fill(...), 在当前的interval的window中,如果没有查询到值 // Authorizer can limit access to data Authorizer Authorizer } Cursor select后会得到这个cursor,用来遍历查询结结果
在整个TIG(Telegraf+influxdb+grafana)方案中,influxdb可算作一个中间件,主要负责原始数据的存储,并按照时间序列进行索引构建以提供时间序列查询接口。 Influxdb研究与实践: influxdb介绍: 使用TSM(Time Structured Merge)存储引擎,允许高摄取速度和数据压缩; 使用go编写,无需其他依赖; 简单,高性能写查询 /v1.0/high_availability/relay/; 扩展的类sql语言,很容易查询汇总数据; tag的支持,可用让查询变的更加高效和快速; 保留策略有效地自动淘汰过期的数据; 这里只是简单的介绍了influxdb的使用,后期如果想在grafana中汇聚并完美地展示数据,可能需要熟悉influxdb的各种查询语法。 (其实就是sql语句的一些使用技巧,聚合函数的使用,子查询等等)
仅供学习,转载请注明出处 参考官方开源文档 使用HTTP API查询数据 使用HTTP的API查询数据 HTTP API是在InfluxDB中查询数据的主要方法(有关查询数据库的其他方法,请参阅命令行界面和客户端库 InfluxDB返回数据的格式是JSON格式。查询结果显示在"results"数组中。如果发生错误,InfluxDB会设置一个"error"带有错误解释。 在单个API调用中向InfluxDB发送多个查询。 关于查询是2015-01-29T21:55:43.702900257Z的解释: InfluxDB中的所有内容都以UTC格式存储和报告。 最大行限制仅适用于非分块查询。分块查询可以返回无限数量的点。 分块 通过设置chunked=true查询字符串参数,可以使用分块返回结果。
参考文献 InfluxDB 1.7文档https://docs.influxdata.com/influxdb/v1.7/ InfluxDB简介 InfluxDB是一个时间序列数据库,旨在处理高写入和查询负载 简单,高性能的写入和查询HTTP API。 插件支持其他数据提取协议,如Graphite,collectd和OpenTSDB。 专为类似SQL的查询语言量身定制,可轻松查询聚合数据。 标签允许对系列进行索引以实现快速有效的查询。 保留策略有效地自动使过时数据过期。 连续查询自动计算聚合数据,以提高频繁查询的效率。 InfluxDB的开源版本在单个节点上运行。 并进行查询所需要知道的全部内容。 要了解有关InfluxDB写入协议的更多信息,请查看写入数据指南。要进一步探索查询语言,请查看查询数据指南。有关InfluxDB概念的更多信息,请查看“ 关键概念”页面。
简单,高性能的写入和查询HTTP API。 插件支持其他数据提取协议,如Graphite,collectd和OpenTSDB。 专为类似SQL的查询语言量身定制,可轻松查询聚合数据。 标签允许对系列进行索引以实现快速有效的查询。 保留策略有效地自动使过时数据过期。 连续查询自动计算聚合数据,以提高频繁查询的效率。 InfluxDB的开源版本在单个节点上运行。 写入数据到数据库中 现在我们有了一个数据库,InfluxDB已准备好接受查询和写入。 并进行查询所需要知道的全部内容。 要了解有关InfluxDB写入协议的更多信息,请查看写入数据指南。要进一步探索查询语言,请查看查询数据指南。有关InfluxDB概念的更多信息,请查看“ 关键概念”页面。
第一次的方案 第一次是很简单的,就是mysql建索引,在时间戳和其余两个条件查询比较多的字段建索引,然后最近一天的数据是存放到redis缓存当中的, 一开始感觉还是不错的,所以查询实时的数据还是挺快的 ,查询历史数据因为有索引的关系,所以速度也还可以。 /CymaticLabs/InfluxDBStudio 这个工具查询数据多的时候渲染会很卡,不要以为是查询数据慢了, 我一开始就是以为查的慢。 因为数据保存的时候InfluxDB是按照自己的格式存储的,如果要用秒时间戳作为条件查询,就要这样写啦, 在api文档里面有说明 api文档的快捷入口:https://docs.influxdata.com /influxdb/v1.7/tools/api/ 第二种则是使用Builder查询,其实就是帮你把要查询的操作封装起来,到最后解析成SQL,最后再调用方式一的query方法。
相比其他类型的时序数据库,InfluxDB的主要优势在于: 内置 HTTP 接口,使用起来更方便; 数据可以打标记,查询更灵活; 类 SQL 的查询语句; 安装管理简单,且读写数据高效; 实时查询,数据在写入时被索引后就能够被立即查出 HTTP API 使用简单,且支持高效的写入和查询。 数据写入:支持通过API方式和InfluxDB语法写入协议;类SQL的查询语句,可轻松查询聚合数据; 数据查询:支持通过API访问和控制台查询两种方式;支持对标签(tag)建索引,以实现快速有效的查询。 时序数据计算能力 提供专业全面的时序数据计算函数,支持数据多维度(降采样、插值、多种聚合计算)查询分析;连续查询(CQ)自动计算聚合数据,以提高频繁查询的效率;保留策略(RP)有效地自动使过时数据过期。 UTSDB-InfluxDB可帮助制造商创造新的商业模式,将产品转化成服务、数据转化成价值,提供多种查询方式,能够从整体大局上查看数据趋势及平均数值,从多维度进行数据分析、成本预算、资源规划等。
类 SQL 查询语言。 Tags allow series to be indexed for fast and efficient queries.采用 Tags 进行快速高效查询。 它由Go写成,着力于高性能地查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据,IoT行业的实时数据等场景。 dc=Frankfurt”,表示测量的一些元数据) time是主索引; measurement相当于 SQL 的表; field是 SQL 的列,没有被建立索引; tag被建立的索引,可以通过它来查询 的基础使用可以查看官方的入门教程,这是命令行的操作,也支持 HTTP 直接写入和查询,可以查看 curl示例。 试试插入两个 field > INSERT temperature,machine=unit42,type=assembly external=25,internal=37 > 查询下结果: > SELECT
时序数据库排名.png InfluxDB部署简单、使用方便,在技术实现上充分利用了Go语言的特性,无需任何外部依赖即可独立部署。提供类似于SQL的查询语言,接口友好,使用方便。 InfluxDB的写性能是OpenTSDB的5倍,存储效率是OpenTSDB的16.5倍,查询效率是OpenTSDB的3.65倍。 的20倍,查询效率是MongoDB的5.7倍。 的6.3倍,查询效率是Graphite的9倍。 的2.1倍,查询效率是Cassandra的45倍。
5、查询 select * from mt where 中对字符串的过滤必须用单引号,tag默认为字符串类型 三、InfluxDB进行HTTP API查询 使用HTTP API在InfluxDB进行查询主要是发送 data-urlencode "db=mydb" --data-urlencode "q=SELECT value FROM mt WHERE name = 'mengtao'" ---- 参数db指定了需查询的数据库 ,q代表了需执行的查询语句。 我们可能需要用InfluxDB进行多条查询,HTTP API提供的多条查询的格式如下所示: ---- curl -G 'http://localhost:8086/query? SELECT value FROM mt WHERE name='mengtao'; SELECT count(value) FROM mt WHERE name='mengtao'" ---- 格式与单条查询相同
你会看到这个屏幕: [InfluxDB数据UI屏幕] 在此屏幕中,您可以将一些测试数据写入数据库。您还可以针对存储在数据库中的数据发出即席查询,并查看基本可视化。 现在我们已经编写了一些示例数据点,我们可以检查它们。在页面顶部的“ 读取点”部分的“ 查询”框中,输入以下查询: select * from test_metric 然后按蓝色的“ 执行查询”按钮。 在UI中的数据接口(我们在步骤5中停止的位置)中,在“ 读取点 ”下的“ 查询”文本框中输入以下查询,然后按蓝色“ 执行查询”按钮。 选择Influxdb / interface-eth0 / if_errors指标。 接下来,单击图表管理菜单底部的+添加查询。这将向查询构建器添加第二个查询行。 使用与以前相同的方法为Influxdb / interface-eth0 / if_octets指标添加查询,并再次为Influxdb / interface-eth0 / if_packets指标添加查询
配置方面踩坑经验: max-row-limit不为0,会导致influxdb OOM,配置时设置为0 查询限制参数不要修改,使用默认配置,否则会出现各种奇葩问题 写入超时时间默认是10s,需要按需调大 Continuous Query CQ是预先配置好的一些查询命令,定期自动执行这些命令并将查询结果写入指定的measurement中,这个功能主要用于数据聚合。 每一个shard都有自己的cache、wal、tsm file以及compactor,目的就是通过时间来快速定位到要查询数据的相关资源,加速查询的过程,并且也让之后的批量删除数据的操作变得非常简单且高效 (参考 饿了么Influxdb实践之路) 04 结语 influxdb的部署是非常简单的,本文的主要目的是推出influxdb,让更多的小伙伴多一种可选的数据库; 之前我们也介绍过prometheus 比hive快10倍的大数据查询利器-- presto 4. 监控利器出鞘:Prometheus+Grafana监控MySQL、Redis数据库 5.
现在我们已经编写了一些示例数据点,我们可以检查它们。在页面顶部的“ 读取点”部分的“ 查询”框中,输入以下查询: select * from test_metric 然后按蓝色的“ 执行查询”按钮。 在UI中的数据接口(我们在步骤5中停止的位置)中,在“ 读取点 ”下的“ 查询”文本框中输入以下查询,然后按蓝色“ 执行查询”按钮。 显示元素包含用于从数据源(在我们的示例中为InfluxDB)中获取数据的查询。因此,我们首先需要创建一个空的仪表板,作为我们显示的基础。 选择Influxdb / interface-eth0 / if_errors指标。 接下来,单击图表管理菜单底部的+添加查询。这将向查询构建器添加第二个查询行。 使用与以前相同的方法为Influxdb / interface-eth0 / if_octets指标添加查询,并再次为Influxdb / interface-eth0 / if_packets指标添加查询
时序数据库选型 Influxdb vs Prometheus influxdb集成已有的概念,比如查询语法类似sql,引擎从LSM优化而来,学习成本相对低。 Continuous Query CQ是预先配置好的一些查询命令,定期自动执行这些命令并将查询结果写入指定的measurement中,这个功能主要用于数据聚合。具体参考:CQ。 每一个shard都有自己的cache、wal、tsm file以及compactor,目的就是通过时间来快速定位到要查询数据的相关资源,加速查询的过程,并且也让之后的批量删除数据的操作变得非常简单且高效 在初期使用时,并没有多大的问题,随着influxdb在公司的推广,接入方越来越多,意味着查询方越来越多,这就带来了以下问题: grafana需要配置很多个数据源。 用户查询直连数据库,用户select *数据库直接OOM,数据库会重启。 relay提供的重写功能,数据是保留在内存中,一旦influxdb挂掉,就会导致relay机器内存疯涨。
一、前言 本篇适用范围 CentOS 7+ InfluxDB 1.4.x 环境信息 CentOS 7 InfluxDB 1.4.2 二、安装 将InfluxDB加入yum源 cat <<EOF | sudo shell version: 1.4.2 > 三、配置 创建用户 #创建用户 CREATE USER influx WITH PASSWORD 'influx' WITH ALL PRIVILEGES #查看用户 SHOW USERS 创建数据库 #创建数据库 CREATE DATABASE test #查看数据库 SHOW DATABASES 四、语法 InfluxDB里存储的数据被称为时间序列数据,InfluxDB 查询 #查询所有数据 SELECT * FROM "cpu" SELECT "host","load","usage" FROM "cpu" #根据条件查询 SELECT "host","load", load=0.2,usage=0.22 1666666666666666662 cpu,host=192.168.1.3 load=0.2,usage=0.33 1666666666666666662" 查询数据
measurement是InfluxDB必须的, 严格地说,tags是可选的,但是对于大部分数据都会包含tags用来区分数据的来源,让查询变得容易和高效。 tag的key和value都必须是字符串。 查询数据 使用HTTP接口查询数据 过发送一个GET请求到/query路径,并设置URL的db参数为目标数据库,设置URL参数q为查询语句。 在一次API调用中发送多个InfluxDB的查询语句,可以简单地使用分号;分隔每个查询, curl -G 'http://localhost:8086/query? 返回结果可以按10000数据点被分块,为了改变这个返回最大的分块的大小,可以在查询的时候加上chunk_size参数,例如返回数据点是每20000为一个批次。 提供了两个特性——连续查询(Continuous Queries简称CQ)和保留策略(Retention Policies简称RP),分别用来处理数据采样和管理老数据的。
工欲善其事必先利其器,想要用好InfluxDB,当然要先厘清其基本概念,本文为InfluxDB核心概念系列文章之设计原则。 InfluxDB 实现了时间序列数据的优化设计原则。 按时间排序的数据 严格的更新和删除权限 首先处理读写查询 无模式设计 单个点上的数据集 重复数据 按时间排序的数据 为了提高性能,数据按时间升序写入。 严格的更新和删除权限 为了提高查询和写入性能,InfluxDB 严格限制更新和删除权限。 时间序列数据主要是从未更新的新数据。 删除通常只影响未写入的数据,并且永远不会发生有争议的更新。 首先处理读写查询 InfluxDB 将读取和写入请求置于强一致性之上。 InfluxDB 在执行查询时返回结果。 任何影响查询数据的事务都会随后进行处理,以确保数据最终一致。 因此,如果摄取率较高(每毫秒多次写入),则查询结果可能不包括最近的数据。 无模式设计 InfluxDB 使用无模式设计来更好地管理不连续数据。
连续查询是InfluxDB的一种查询类型。它会按照用户指定的查询规则,自动地、周期地查询实时数据并执行指定运算,然后将查询结果保存在一张指定的表中。 通过创建连续查询,用户可以指定InfluxDB执行连续查询的时间间隔、单次查询的时间范围以及查询规则。 function[s]:要查询的字段及数据处理的内置函数。 destination_measurement:保存查询结果的目标表;若目标表不存在,InfluxDB自动创建。 tag_key[s]归类的标签字段,可选参数 注意:InfluxDB在执行连续查询语句时,会根据time(interval) 的值自动生成查询时间范围。 influxDB会在每个小时开始的时候执行连续查询语句,如11:00,12:00,13:00 infulxDB首先通过now()函数获取当前时间,再用当前时间减去group by time()指定的时间间隔
多种数据源、丰富图表、一体化大盘的托管可视化服务,安全、免运维 ,快速集成腾讯云数据
扫码关注云+社区
领取腾讯云代金券