前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >180726-时序数据库InfluxDB基本概念小结

180726-时序数据库InfluxDB基本概念小结

作者头像
一灰灰blog
发布于 2022-01-17 08:45:28
发布于 2022-01-17 08:45:28
72000
代码可运行
举报
文章被收录于专栏:小灰灰小灰灰
运行总次数:0
代码可运行

InfluxDB基本概念小结

InfluxDB作为时序数据库,与传统的关系型数据库相比而言,还是有一些区别的,下面尽量以简单明了的方式介绍下相关的术语概念

<!-- more -->

I. 基本概念

mysql

influxdb

说明

database

database

数据库

table

measurement

类似mysql中表的概念

record

tag + field + timestamp

传统表中的一行数据,映射到influxdb中,可以划分为三个

1. database

数据库,和mysql的数据库相比,没有太大的歧义

2. measurement

对比的是mysql中的table,从实际体验来看,两个之间最明显的区别在于没有单独的创建measurement的方法,直接新增一条数据时,若measurement不存在,则直接创建并插入一条数据

3. Point

这个对比的是mysql中的record,在influxDB中,表示每个表中,某个时刻,满足某个条件的filed数据(简单来说就是 timestamp + tag + filed)的组成一个point

  • timestamp : 时间戳,ns单位,每个记录都必然有这个属性,没有显示添加时,默认给一个
  • tag: 标签,kv结构,在database中, tag + measurement 一起构建索引
    • 参与索引创建,因此适合作为查询的过滤条件
    • tag的数据量不要太多,最好能有典型的辨别性(和mysql的建立索引的原则差不多)
    • value为String类型
    • tag是可选的,在measurement不设置tag也是ok的
  • field:存储数据,kv结构
    • 数据类型为: long, String, boolean, float

4. Series

Series: tag key 与tag value的唯一组合

II. 实例分析

上面几个为基本的概念,单独的看起来印象不够深刻,下面结合实例进行说明:

建立一个measurement,保存某个应用的性能状况,包含以下指标, 每秒写一次数据到influxDB中

  • 服务机器: host=127.0.0.1
  • 服务接口: service=app.service.index
  • qps: qps=1340
  • rt: 1313
  • cpu: 45.23
  • mem: 4154m
  • load: 1.21

1. measurement创建

上面有7个指标参数,第一步就是区分tag和field,前面说到tag会建索引,推荐用于可以区分类型,取值可以预估的字段,所以对上面进行如下区分

tag

  • host
  • servie

field

  • qps
  • rt
  • cpu
  • mem
  • load

一条实际的插入数据如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> insert myapp,host=127.0.0.1,service=app.service.index qps=1340,rt=1313,cpu=45.23,mem="4145m",load=1.21
> select * from myapp
name: myapp
time                cpu   host      load mem   qps  rt   service
----                ---   ----      ---- ---   ---  --   -------
1532597158613778583 45.23 127.0.0.1 1.21 4145m 1340 1313 app.service.index
a. 小结说明
  • 在insert执行语句中,tag与tag、field与field之间用都好进行分割,tag与field之间用空格分割
  • tag的value都是,String类型,不需要加双引号
  • field的String类型数据,需要放在双引号中,否则会报错
  • 如果需要显示添加时间戳,在filed后添加空格,再添加时间戳
b. 是否可以没有field

实测不行,输出如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> insert myabb,host=123,service=index
ERR: {"error":"unable to parse 'myabb,host=123,service=index ': invalid field format"}
是否可以没有tag

根据前面的说明已经实测,可以

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> insert myabb qps=123,rt=1231
> select * from myabb
name: myabb
time                qps rt
----                --- --
1532597385053030634 123 1231

2. 数据分析

新插入几条数据,目前的数据为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> select * from myapp
name: myapp
time                cpu   host      load mem   qps  rt   service
----                ---   ----      ---- ---   ---  --   -------
1532597158613778583 45.23 127.0.0.1 1.21 4145m 1340 1313 app.service.index
1532597501578551929 45.23 127.0.0.1 1.21 4145m 1341 1312 app.service.index
1532597510225918132 45.23 127.0.0.1 1.21 4145m 1341 1312 app.service.about
1532597552421996033 45.23 127.0.0.2 1.21 4145m 1341 1312 app.service.about
a. series

上面四条数据,对应几个series呢 ?

根据前面的说法,tagKey + tagValue 确定给一个series (实际上是 measurement + retention policy + tags来确定),因此上表总共有三个series

  • 127.0.0.1 | app.service.index
  • 127.0.0.1 | app.service.about
  • 127.0.0.2 | app.service.about

那么这个series到底是什么东西呢?

如果将上面的数据图表化的方式显示出来,我们可以怎么办?

  • 首先我们确定好应用及其和服务名,然后查看这个服务在这台机器上,在时间线上的服务性能
  • 翻译过来就是,将cpu/service作为检索条件,以time为时间轴,将value(cpu,load,mem,qps,rt)映射到二维坐标上作为一个点(point),然后将所有的point连接成线,最终得到连续的图表

所以series就是上面的检索条件,同时point的概念也容易理解了

III. 保留策略

前面是表数据的相关基础概念,这里还有一个就是数据保存的策略 retention policy, 用于决定数据保存多久(意思是数据可以删除),保存几个备份,集群的处理等

1. 基本说明

influxdb面向大数据的时序数据库,所以数据量可以很大很大,如果全部存储,估计硬盘的费用都不小,而且有些数据可能并不需要永久存储,因此就有了这个rentention policy

InfluxDB本身不提供数据的删除操作,因此用来控制数据量的方式就是定义数据保留策略。

因此定义数据保留策略的目的是让InfluxDB能够知道可以丢弃哪些数据,从而更高效的处理数据。

2. 基本操作

a. 查询策略
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> show retention policies on hh_test
name    duration shardGroupDuration replicaN default
----    -------- ------------------ -------- -------
autogen 0s       168h0m0s           1        true
  • name: 名称
  • duration: 保留时间, 0表示永久保存
  • shardGroupDuration: shardGroup的存储时间,shardGroup是InfluxDB的一个基本储存结构,应该大于这个时间的数据在查询效率上应该有所降低。
  • replicaN: 全称是REPLICATION,副本个数
  • default: 是否是默认策略
b. 新建策略
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> create retention policy "2_hour" on hh_test duration 2h replication 1 default
> show retention policies on hh_test
name    duration shardGroupDuration replicaN default
----    -------- ------------------ -------- -------
autogen 0s       168h0m0s           1        false
2_hour  2h0m0s   1h0m0s             1        true
c. 修改策略
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> alter retention policy "2_hour" on hh_test duration 4h default
> show retention policies on hh_test
name    duration shardGroupDuration replicaN default
----    -------- ------------------ -------- -------
autogen 0s       168h0m0s           1        false
2_hour  4h0m0s   1h0m0s             1        true
d. 删除策略
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> drop retention policy "2_hour" on hh_test
> show retention policies on hh_test
name    duration shardGroupDuration replicaN default
----    -------- ------------------ -------- -------
autogen 0s       168h0m0s           1        false

删除默认策略之后,就没有默认策略了,是否会有问题呢?

3. RP理解

设置这个策略之后,会自动删除过期的数据,那么数据时怎么保存的呢?

比如默认的永久保存策略中,有个 shardGroupDuration 参数,为7天,也就是说7天的数据放在一个Shard中,过了之后,新加一个Shard

shard包含实际的编码和压缩数据,并由磁盘上的TSM文件表示。 每个shard都属于唯一的一个shard group。多个shard可能存在于单个shard group中。每个shard包含一组特定的series。给定shard group中的给定series上的所有点将存储在磁盘上的相同shard(TSM文件)中。

IV. 其他

1. 一灰灰Bloghttps://liuyueyi.github.io/hexblog

一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

2. 声明

尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/07/26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
时序数据库InfluxDB之备份和恢复策略
首先创建一个数据库 yhhblog, 里面包含两个measurement,对应的数据如下
一灰灰blog
2018/07/29
2.8K0
时序数据库InfluxDB之备份和恢复策略
一小时入门时序数据库 influxDB
InfluxDB是一个由InfluxData开发的开源时序型数据。它由Go写成,着力于高性能地查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据,IoT行业的实时数据等场景。 主要特性有:
陈大剩博客
2023/03/06
1.2K0
java使用influxDB时序数据库
InfluxDB的字段类型,由第一条插入的值得类型决定;tags的类型只能是String型,可以作为索引,提高检索速度。
半条命专刊
2020/09/14
2.9K0
时序数据库 InfluxDB(一)
数据库种类有很多,比如传统的关系型数据库 RDBMS( 如 MySQL ),NoSQL 数据库( 如 MongoDB ),Key-Value 类型( 如 redis ),Wide column 类型( 如 HBase )等等等等,当然还有本系列文章将会介绍的时序数据库 TSDB( 如 InfluxDB )。
凌虚
2020/07/17
3.6K0
彻底搞懂时序数据库InfluxDB,在SpringBoot整合InfluxDB
之前介绍了运维监控系统Prometheus,然后就有朋友问我关于时序数据库的情况,所以这里总结一下时序数据库,并以InfluxDB为例,介绍时序数据库的功能特性和使用方式,希望能对大家有所帮助。
章为忠学架构
2023/10/06
20.4K0
彻底搞懂时序数据库InfluxDB,在SpringBoot整合InfluxDB
时序数据库 InfluxDB(二)
先回顾一下 RP 策略( retention policy ),它由三个部分构成:
凌虚
2020/07/17
1.8K0
时序数据库详解和使用说明_时序数据库 应用场景
什么是时间序列数据(Time Series Data,TSD,以下简称时序)从定义上来说,就是一串按时间维度索引的数据。用描述性的语言来解释什么是时序数据,简单的说,就是这类数据描述了某个被测量的主体在一个时间范围内的每个时间点上的测量值。它普遍存在于IT基础设施、运维监控系统和物联网中。
全栈程序员站长
2022/11/09
5.2K0
时序数据库详解和使用说明_时序数据库 应用场景
时序数据库技术体系(二)–初识InfluxDB
在上篇文章《时序数据库体系技术 – 时序数据存储模型设计》中笔者分别介绍了多种时序数据库在存储模型设计上的一些考虑,其中OpenTSDB基于HBase对维度值进行了全局字典编码优化,Druid采用列式存储并实现了Bitmap索引以及局部字典编码优化,InfluxDB和Beringei都将时间线挑了出来,大大降低了Tag的冗余。在这几种时序数据库中,InfluxDB无疑显的更加专业。接下来笔者将会针对InfluxDB的基本概念、内核实现等进行深入的分析。本篇文章先行介绍一些相关的基本概念。 InfluxDB
企鹅号小编
2018/02/01
1.8K0
时序数据库技术体系(二)–初识InfluxDB
InfluxDB 设置数据保留策略,验证保留的数据存储大小
在使用Telegraf+InfluxDB+Grafana监控服务器资源的时候,如果influxdb中的数据不设置超时过期的机制的话,那么数据就会默认一直保存。这样一直保存的话,数据量就会导致偏大。 这时候就要适当调整influxdb的数据存储时长,保留最近一段时间的数据即可。
Devops海洋的渔夫
2019/12/02
12.1K0
饿了么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实践之路
2.InfluxDB2.x数据库实践使用
描述: 在 V2.x 版本中 influx 客户端命令已独立处理, 其与V1.x版本的 influx cli 参数与使用大不相同, 此处主要讲解V2.x相关语法参数,但也会简单提及一下V1.x版本语法及其使用。
全栈工程师修炼指南
2022/09/29
5.9K1
2.InfluxDB2.x数据库实践使用
InfluxDB常见疑问与解答 - 数据写入时如何在表级别指定保留策略
这个特性InfluxDB支持的,写入时序数据时,在行协议前加上保留策略名,以influx命令行操作为例,insert语句的语法如下。
hanj4096
2019/10/18
3.3K0
InfluxDB常见疑问与解答 - 数据写入时如何在表级别指定保留策略
1.InfluxDB数据库快速入门与基础使用
[TOC] 0x00 前言简述 InfluxDB 介绍 Q: 什么是InfluxDB? InfluxDB 采用Go语言开发是一个开源时间序列平台, 是一个可编程且高性能的时间序列数据库,具有跨 OS
全栈工程师修炼指南
2022/09/29
8.6K0
1.InfluxDB数据库快速入门与基础使用
时序数据库influxdb简介
influxdb是一款开源的时序数据库,可以用作监控系统的数据存储或用来存储基于时序进行分析的业务系统的数据存储。
俊才
2020/05/04
2.8K0
influxdb安装和学习
https://docs.docker.com/samples/library/influxdb/
Ryan-Miao
2019/06/21
1.6K0
influxdb基本操作_一个数据库只有一个内模式
转载于:https://juejin.im/post/5c4f07b7e51d454b0d75d883
全栈程序员站长
2022/11/16
3190
开源时序数据库 InfluxDB
在选择时间序列数据库时,最重要的考虑因素是存储和查询性能、存储空间效率和灵活的可扩展性,而InfluxDB似乎是一个不错的选择。从时间序列数据库相关的趋势数据来看,它已经超越了以前常用的RRDTool和Graphite,以压倒性的速度增长
Tinywan
2024/06/04
5480
开源时序数据库 InfluxDB
Influx Sql系列教程五:insert 添加数据
接下来开始进入influxdb的curd篇,首先我们看一下如何添加数据,也就是insert的使用姿势
一灰灰blog
2019/08/21
1.4K0
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的单机版是开源的,而集群版是商业版,influxdb被设计运行在SSD上,如果使用机器或者网络磁盘作为存储介质,会导致性能下降至少一个数量级。influxdb支持restful api,同时也支持https,为了保证安全性,非局域网建议使用https与Influxdb进行通信。
luoxn28
2020/02/17
1.8K0
influxdb的命令们
相关推荐
时序数据库InfluxDB之备份和恢复策略
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验