Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >influxdb基础入门

influxdb基础入门

作者头像
luoxn28
发布于 2020-02-17 03:54:14
发布于 2020-02-17 03:54:14
1.3K00
代码可运行
举报
文章被收录于专栏:TopCoderTopCoder
运行总次数:0
代码可运行

戳蓝字「TopCoder」关注我们哦!

编者注:InfluxDB是一个开源的时序数据库,使用GO语言开发,特别适合用于处理和分析资源监控数据这种时序相关数据。而InfluxDB自带的各种特殊函数如求标准差,随机取样数据,统计数据变化比等,使数据统计和实时分析变得十分方便。

influxdb的单机版是开源的,而集群版是商业版,influxdb被设计运行在SSD上,如果使用机器或者网络磁盘作为存储介质,会导致性能下降至少一个数量级。influxdb支持restful api,同时也支持https,为了保证安全性,非局域网建议使用https与Influxdb进行通信。

influxdb基础

infludb中存储的是时间序列数据,比如说某个时间点系统负载、服务耗时等信息,时间序列数据可以包含多个值。关于什么是时间序列数据,简单来来说就是数据是和一个时间点关联的,结合mysql中的记录与id关系来看就是时间序列数据的主键就是时间点(timestrap)。

infludb中的一条数据至少包括measurement(对应mysql中表概念)、timestamp、至少一个k-v结构的field,再加上0个或者多个k-v结构的tag。对比mysql来看,measurement就是一张表,其主键是timestamp时间戳,tag和field对应就是表中列,tag和field都是k-v接口,k对应列的名字,v对应该列存储的值,tag和field不同的是,tag是有索引的而field没有(如果查询条件为tag则会扫描所有查询到的数据),对于mysql表的有索引列和无索引列。注意mysql中的表需要提前定义结构,而influxdb中的measurement无需提前定义,其null值也不会被存储。

influxdb中measurement无需定义,即无模式设计,开发者可以在任意添加measurement,tags和fields,不过针对同一个field,第二次和第一次写入的数据类型不匹配,influxdb会报错(由于默认tag的v都是字符串类型,所有不存在这个问题,不管输入是什么数据都当做字符串来处理)。

数据读写

influxdb数据写入需满足如下格式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
insert <measurement>[,<tag-key>=<tag-value>...] <field-key>=<field-value>[,<field2-key>=<field2-value>...] [unix-nano-timestamp] 

注意:measurement和至少一个fileld的k-v是必须的,tag和timestrap时间戳是可选的。

说实话,这个写入格式还是有点小严格的,因为它要求measurement和可能的0个或多个tag之间必须是紧挨着的,中间不能有空格;同时多个filed之间也是不能有空格,tag和field的k,tag的v都是字符串类型;时间戳不是必须的,如果为空则使用服务端的本地时间作为时间戳。相同时间戳的数据第二次写入会覆盖第一次写入的数据,相当于更新操作。

为什么至少有一个filed是必须的,而tag是可选的呢?

这是influxdb的存储模型决定的,measurement+tag set+field key作为key,field value作为value,如果没有field则没有了对应的value了。

插入数据的tag key和field key能一样么?

数据插入没问题,这是由于infludb底层存储tag和field是在不同地方的,只不过为了区分会加上_序号而已,如下图:

当在use某个db之后,就可以执行数据读写操作,比如下面往名字为cpu的MEASUREMENT(对应mysql中的表概念)中写入如下数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
insert cpu,host=s01,region=hangzhou value=0.64 1520052020000000000
命令说明:
- 插入数据对应的MEASUREMENT名字为cpu;
- 数据tag分别是host和region,field是value;
- 数据的最后一项是时间戳(1520052020000000000),时间戳不是必须的,如果不传则使用influxdb服务端本地时间戳,注意时间戳都是UTC时间

数据保留策略

Influxdb可支持每秒十万级别的数据量,如果长时间保存会对存储造成很大压力,因此和一般数据存储系统一样有一个数据保留策略,同时针对大流量量数据可采样保存,小流量数据可全量保存。influxdb通过保留策略(RP,Retention Policy)来管理过期数据,使用连续查询(CR,Continuous Queries)来进行数据采样。

  • RP:数据保留策略,过期数据会被清除,每个数据库可拥有多种RP策略;
  • CQ:数据连续查询,定时跑的一个查询语句,比如周期性统计某个数据指标,查询语句需要在select语句中使用并且包含group by time子句(这里有点类似Flink中流数据处理的按时间窗口统计功能)。

默认写数据不指定保留策略(RP,Retention Policy)时,默认使用influxdb默认的RP,名字叫做autogen的RP会永久保留数据。如果使用命令 create retention policy "default2" on "db2" duration 2h replication 1 default,执行该命令后default2会取代默认的autugen作为db2数据库的默认RP,默认influxdb会间隔半个小时执行一次RP操作。

比如有一个服务请求日志measurement的名字为log(RP策略是2小时,数据库是db2),其中数据有服务耗时(字段对应名字time),我们想统计每分钟平均服务耗时,然后将平均耗时数据写入到名字为log2的measurement(RP策略是2天),该如何做呢?

首先创建2小时和2天的RP策略:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create retention policy "tow_hour" on db2 duration 2h replication 1
# 对数据库db2创建一个名字叫"tow_hour"RP策略,数据保存2小时,由于最后没有加default,所以数据读写如果没有执行RP仍然使用的是influxdb默认的RP
create retention policy "tow_day" on db2 duration 2d replication 1
# 对数据库db2创建一个名字叫"tow_day"RP策略,注意对于单机版influxdb来说replication无意义

然后使用create continuous query创建CQ策略:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create continuous query "cq_avg_time" on db2 
begin 
    select mean("time") as "mean_time" into "tow_day"."log2" from log 
    group by time(1m) 
end

这样就创建了一个名字叫cq_avg_time的CQ作用于db2数据库,每1分钟一次计算measurement为log的time字段的平均值,然后写入到另一个measurement为log2中。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 TopCoder 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
influxdb的命令们
influxdb的单机版是开源的,而集群版是商业版,influxdb被设计运行在SSD上,如果使用机器或者网络磁盘作为存储介质,会导致性能下降至少一个数量级。influxdb支持restful api,同时也支持https,为了保证安全性,非局域网建议使用https与Influxdb进行通信。
luoxn28
2020/02/17
1.8K0
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
时序数据库 InfluxDB(一)
数据库种类有很多,比如传统的关系型数据库 RDBMS( 如 MySQL ),NoSQL 数据库( 如 MongoDB ),Key-Value 类型( 如 redis ),Wide column 类型( 如 HBase )等等等等,当然还有本系列文章将会介绍的时序数据库 TSDB( 如 InfluxDB )。
凌虚
2020/07/17
3.5K0
influxdb 时间序列数据库
1、InfluxDB 是用Go语言编写的一个开源分布式时序、事件和指标数据库,无需外部依赖。 基于时间序列,支持与时间有关的相关函数(如最大,最小,求和等) 可度量性:你可以实时对大量数据进行计算 基于事件:它支持任意的事件数据 1)无结构(无模式):可以是任意数量的列 2)可拓展的 3)支持min, max, sum, count, mean, median 等一系列函数,方便统计 4)原生的HTTP支持,内置HTTP API 5)强大的类SQL语法 6)自带管理界面,方便使用 2、安装: rpm -ivh https://dl.influxdata.com/influxdb/releases/influxdb-0.13.0.x86_64.rpm 3、启动: sudo service influxdb start 4、客户端: 在usr/bin里使用influx即可登入Influx服务器。也可以将路径加入环境变量中,这样既可在任意地方使用influx。 InfluxDB自带web管理界面,在浏览器中输入 http://服务器IP:8083 即可进入web管理页面。 5、基本概念: database 数据库 measurement 表 point 表中的一行数据 point由time(自动生成的时间戳),field数据,tags由索引的数据 series所有在数据库中的数据,都需要通过图表来展示,而这个series表示这个表里面的数据,可以在图表上画成几条线:通过tags排列组合算出来。 6、基本操作: 客户端命令行、HTTP API、各语言API库 show databases; create database test drop database test use test
用户5760343
2022/05/14
1.2K0
influxdb 时间序列数据库
开源时序数据库 InfluxDB
在选择时间序列数据库时,最重要的考虑因素是存储和查询性能、存储空间效率和灵活的可扩展性,而InfluxDB似乎是一个不错的选择。从时间序列数据库相关的趋势数据来看,它已经超越了以前常用的RRDTool和Graphite,以压倒性的速度增长
Tinywan
2024/06/04
4700
开源时序数据库 InfluxDB
InfluxDB从原理到实战 - InfluxDB常用的基础操作
在本文中将介绍InfluxDB常用的基础操作,帮助读者建立对InfluxDB的感性认识,快速的动手玩起来,持续查询(Continuous Queies)、Group by、Series、行协议(Line Protocol)、InfluxQL等高级特性和细节,将会在后续文章中逐步介绍。
hanj4096
2019/08/30
4.3K0
InfluxDB从原理到实战 - InfluxDB常用的基础操作
influxdb基本操作_一个数据库只有一个内模式
转载于:https://juejin.im/post/5c4f07b7e51d454b0d75d883
全栈程序员站长
2022/11/16
3140
时序数据库InfluxDB基本概念小结
InfluxDB作为时序数据库,与传统的关系型数据库相比而言,还是有一些区别的,下面尽量以简单明了的方式介绍下相关的术语概念
一灰灰blog
2018/07/29
4.4K0
时序数据库InfluxDB基本概念小结
InfluxDB
另外,InfluxDB也提供了多个可能需要自定义端口的插件,所以的端口映射都可以通过配置文件修改,对于默认安装的InfluxDB,这个配置文件位于/influxdb/influxdb.conf。
框架师
2021/03/05
1.5K0
饿了么Influxdb实践之路
作者 | 刘平 文章来源GitChat,CSDN独家合作发布,查看交流实录:http://gitbook.cn/books/59428f6f7e850f039399fd02/index.html Influxdb是一个基于golang编写,没有额外依赖的开源时序数据库,用于记录metrics、events,进行数据分析。这篇文章谈论的influxdb版本在1.2.0以上。这篇文章只谈论influxdb在监控中的数据存储应用,不会谈论influxdb提供的整套监控方案。本文主要谈论五个方面:时序数据库选
CSDN技术头条
2018/02/08
5K0
饿了么Influxdb实践之路
influxDb_ef mongodb
InfluxDB(时序数据库)(influx,[ˈɪnflʌks],流入,涌入),常用的一种使用场景:监控数据统计。每毫秒记录一下电脑内存的使用情况,然后就可以根据统计的数据,利用图形化界面(InfluxDB V1一般配合Grafana)制作内存使用情况的折线图;可以理解为按时间记录一些数据(常用的监控数据、埋点统计数据等),然后制作图表做统计;
全栈程序员站长
2022/11/01
1K0
influxDb_ef mongodb
influxdb部署以及运行cadvisor
timestamp: 时间戳,因为InfluxDB是时序数据库,它的数据里面都有一列名为time的列,存储记录生成时间。 如 rx_bytes 中的 time 列,存储的就是时间戳。
HaydenGuo
2019/12/13
8730
influxdb部署以及运行cadvisor
一小时入门时序数据库 influxDB
InfluxDB是一个由InfluxData开发的开源时序型数据。它由Go写成,着力于高性能地查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据,IoT行业的实时数据等场景。 主要特性有:
陈大剩博客
2023/03/06
1.1K0
时序数据库技术体系(二)–初识InfluxDB
在上篇文章《时序数据库体系技术 – 时序数据存储模型设计》中笔者分别介绍了多种时序数据库在存储模型设计上的一些考虑,其中OpenTSDB基于HBase对维度值进行了全局字典编码优化,Druid采用列式存储并实现了Bitmap索引以及局部字典编码优化,InfluxDB和Beringei都将时间线挑了出来,大大降低了Tag的冗余。在这几种时序数据库中,InfluxDB无疑显的更加专业。接下来笔者将会针对InfluxDB的基本概念、内核实现等进行深入的分析。本篇文章先行介绍一些相关的基本概念。 InfluxDB
企鹅号小编
2018/02/01
1.7K0
时序数据库技术体系(二)–初识InfluxDB
influxdb 文档_时序数据库 应用场景
InfluxDB是一个由InfluxData开发的开源时序型数据。它由Go写成,着力于高性能地查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据,IoT行业的实时数据等场景。
全栈程序员站长
2022/11/09
1.4K0
influxdb 文档_时序数据库 应用场景
「influxDB 原理与实践(二)」详解influxDB的写入与查询
RESTful风格的接口,返回JSON格式的响应数据,并支持身份认证、JWT令牌、丰富的HTTP响应代码等。 influxDB API接口及接口的定义描述如下图所示:
源码之路
2020/09/04
8.3K0
「influxDB 原理与实践(二)」详解influxDB的写入与查询
influxdb 简介与实现(一)
InfluxDB是一个开源的没有外部依赖的时间序列数据库。适用于记录度量,事件及执行分析。
Timu
2018/07/17
1.5K0
influxdb 简介与实现(一)
时序数据库详解和使用说明_时序数据库 应用场景
什么是时间序列数据(Time Series Data,TSD,以下简称时序)从定义上来说,就是一串按时间维度索引的数据。用描述性的语言来解释什么是时序数据,简单的说,就是这类数据描述了某个被测量的主体在一个时间范围内的每个时间点上的测量值。它普遍存在于IT基础设施、运维监控系统和物联网中。
全栈程序员站长
2022/11/09
4.9K0
时序数据库详解和使用说明_时序数据库 应用场景
数据库笔记 InfluxDB 基础概念及操作
InfluxDB is the open source time series database
twowinter
2020/04/17
1K0
Python简单使用InfluxDB
之前已经在自己的MQTT服务器上安装好了InfluxDB时序数据库,接下来写个Python程序测试下.
py3study
2020/01/03
1.2K0
相关推荐
influxdb的命令们
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验