时序数据库 InfluxDB(一)
时序数据库 InfluxDB(一)
数据库种类有很多,比如传统的关系型数据库 RDBMS( 如 MySQL ),NoSQL 数据库( 如 MongoDB ),Key-Value 类型( 如 redis ),Wide column 类型( 如 HBase )等等等等,当然还有本系列文章将会介绍的时序数据库 TSDB( 如 InfluxDB )。
时序数据库 TSDB
不同的数据库针对的应用场景有不同的偏重。TSDB( time series database )时序数据库是专门以时间维度进行设计和优化的。
TSDB 通常具有以下的特点:
- 时间是不可或缺的绝对主角(就像 MySQL 中的主键一样),数据按照时间顺序组织管理
- 高并发高吞吐量的数据写入
- 数据的更新很少发生
- 过期的数据可以批量删除
InfluxDB 就是一款非常优秀的时序数据库,高居 DB-Engines TSDB rank 榜首。
InfluxDB 分为免费的社区开源版本,以及需要收费的闭源商业版本,目前只有商业版本支持集群。
InfluxDB 的底层数据结构从 LSM 树到 B+ 树折腾了一通,最后自创了一个 TSM 树( Time-Structured Merge Tree ),这也是它性能高且资源占用少的重要原因。
InfluxDB 由 go 语言编写而成,没有额外的依赖,它的查询语言 InfluxQL 与 SQL 极其相似,使用特别简单。
InfluxDB 基本概念
InfluxDB 有以下几个核心概念:
1、database :
数据库。
2、measurement
类似于表。
3、retention policy( 简称 RP )
保留策略,由以下三个部分构成:
- DURATION:数据的保留时长。
- REPLICATION:集群模式下数据的副本数,单节点无效。
- SHARD DURATION:可选项,shard group 划分的时间范围。
4、timestamp
时间戳,就像是所有数据的主键一样。
5、tag
tag key = tag value 键值对存储具体的数据,会构建索引有利于查询。tag set 就是 tag key-value 键值对的不同组合。
6、field
field key = field value 键值对也是存储具体的数据,但不会被索引。类似的 field set 就是 field key-value 的组合。
7、series
一个 series 序列是由同一个 RP 策略下的同一个 measurement 里的同一个 tag set 构成的数据集合。
8、point
一个 point 点代表了一条数据,由 measurement、tag set、field set、timestamp 组成。一个 series 上的某个 timestamp 时间对应唯一一个 point 。
Line protocol 行协议
行协议指定了写入数据的格式:
<measurement>[,<tag-key>=<tag-value>...] <field-key>=<field-value>[,<field2-key>=<field2-value>...] [unix-nano-timestamp]
符号 [] 代表可选项,符号 … 代表可以有多个,符号 ,用来分隔相同 tag 或者 field 下的多个数据,符号空格分隔 tag、field、timestamp 。
示例:
怎么去理解 series 和 point ?先看下图:
这张图选取了三种时序数据库的历年排名得分情况。首先,整个图表可以看成是一个 measurement ,它包含了许多数据;然后我们根据 db 名称构建 tag ,把 score 排名得分作为 field ,那么所有数据行就类似于:
measurement,db=InfluxDB score=5 timestamp
measurement,db=Kdb+ score=1 timestamp
measurement,db=Prometheus score=0.2 timestamp
...
上文说过 tag set 就是 tag key = tag value 的不同组合,因此这里的 tag set 有以下三种:
db=InfluxDB
db=Kdb+
db=Prometheus
三个 tag set 构成了三个 series ,每个 series 就可以看成是图中的一条线(一个维度),而每个 point 点就是 series 上具体某个 timestamp 对应的点。
与传统数据库的不同
InfluxDB 就是被设计用于处理时间序列的数据。传统SQL数据库虽然也可以处理时间序列数据,但并不是专门以此为目标的。InfluxDB 可以更加高效快速的存储大量时间序列数据并对这些数据进行实时分析。
在 InfluxDB 中,时间是绝对的主角,就像是SQL数据库中的主键一样,如果你不指定则会默认为系统当前时间,时间必须是 UNIX epoch ( GMT ) 或者 RFC3339 格式。
InfluxDB 不需要预先定义好数据的结构,你可以随时改变你的数据结构。InfluxDB 支持 continuous queries(连续查询,就是以时间划分范围自动定期执行某个查询)和 retention policies(保留策略)。InfluxDB 不支持跨 measurement 的 JOIN 查询。
InfluxDB 中的查询语言叫 InfluxQL ,语法与 SQL 极其相似,就是 select from where 那一套。
InfluxDB 并不是 CRUD,更像是 CR-ud ,意思就是更新和删除数据跟传统SQL数据库明显不一样:
- 更新某个 point 数据,只需向原来的 measurement,tag set,timestamp 重写数据即可。
- 你可以删除 series ,但是不能基于 field 值去删除独立的 points ,解决方法是,你需要先查询 field 值的时间戳,然后根据时间戳去删除。
- 无法更新或重命名 tags ,因为 tags 会构建索引,你只能创建新的 tags 并导入数据然后删除老的。
- 无法通过 tag key 或者 tag value 去删除 tags 。
设计与权衡之道
InfluxDB 为了更高的性能做了一些设计与权衡之道:
1、对于时间序列用例,即使相同的数据被发送多次也会被认为是同一笔数据。
- 优点:简化了冲突,提高了写入性能。
- 缺点:不能存储重复数据,可能会在极少数情况下覆盖数据。
2、删除是罕见的,当它们发生时肯定是针对大量的旧数据。
- 优点:提高了读写性能。
- 缺点:删除功能受到了很大限制。
3、更新是罕见的,持续或者大批量的更新不会发生。时间序列的数据主要是永远也不会更新的新数据。
- 优点:提高了读写性能。
- 缺点:更新功能受到了很大限制。
4、绝大多数写入都是接近当前时间戳的数据,并且是按时间递增顺序添加。
- 优点:按时间递增的顺序写入数据更高效。
- 缺点:随机时间写入的性能要低很多。
5、数据规模至关重要,数据库必须能够处理大量的读写。
- 优点:数据库可以处理大批量数据的读写。
- 缺点:被迫做出的一些权衡去提高性能。
6、能够写入和查询数据比具有强一致性更重要。
- 优点:多个客户端可以在高负载的情况下完成查询和写入操作。
- 缺点:如果负载过高,查询结果可能不包含最近的点。
7、许多时间序列都是短暂的。时间序列可能只有几个小时然后就没了,比如一台新的主机开机,监控数据写入一段时间,然后关机了。
- 优点:InfluxDB 善于管理不连续的数据。
- 缺点:无模式设计意味着不支持某些数据库功能,例如没有 join 交叉表连接。
8、No one point is too important 。
- 优点:InfluxDB 具有非常强大的工具去处理聚合数据和大数据集。
- 缺点:Points 数据点没有传统意义上的 ID ,它们被时间戳和 series 区分。
相关文章:
时序数据库 InfluxDB(一)
时序数据库 InfluxDB(一) 数据库种类有很多,比如传统的关系型数据库 RDBMS( 如 MySQL ),NoSQL 数据库( 如 MongoDB ),Key-Value 类型( 如 redis )…...
动态添加view方法-微信小程序
在微信小程序中,通过动态数据绑定和条件渲染来实现动态添加 view 组件的效果。 以下是一个简单的示例,展示如何根据数据动态添加 view。 WXML 文件 在 WXML 文件中,使用 wx:for 指令来遍历数组,并动态生成 view 组件。 <view…...
Java中清空集合列表元素有哪些方式
在 Java 里,存在多种清空列表的方式,下面为你汇总并附上对应的示例代码: import java.util.ArrayList; import java.util.List;public class ListClearDemo {public static void main(String[] args) {// 初始化一个列表List<String> …...
QOpenGLWidget动态加载功能实现教程(Qt+OpenGL)
QOpenGLWidget动态加载功能实现教程 我需要在Qt里面使用QOpenGLWidget显示OpenGL窗口,并且需要实现加载模型后重新渲染更新窗口的功能,但是一直无法更新被卡住了,现在把问题解决了总结一下整个实现过程。 创建一个自己的OpenGLWidget类 QOp…...
00.【Linux系统编程】 Linux初识(云服务器设置CentOS并使用、Xshell链接云服务器)
目录 一、华为云服务器免费体验申请 二、Xshell远程链接创建好的华为云服务器 2.1 下载Xshell 2.2 Xshell远程连接华为云服务器 一、华为云服务器免费体验申请 华为云官网 1. 进入华为云官网,最上面一栏点活动,并进入免费体验中心。 2. 找到含有“…...
数据结构-二叉链表存储的二叉树
树形结构是一类重要的非线性数据结构,其中以树和二叉树最为常用。对于每一个结点至多只有两课子树的一类树,称其为二叉树。二叉树的链式存储结构是一类重要的数据结构,其形式定义如下: 而二叉树的前序、中序遍历是非常重要的能够访…...
鸿蒙Flutter实战:20. Flutter集成高德地图,同层渲染
本文以同层渲染为例,介绍如何集成高德地图 完整代码见 Flutter 鸿蒙版 Demo 概述 Dart 侧 核心代码如下,通过 OhosView 来承载原生视图 OhosView(viewType: com.shaohushuo.app/customView,onPlatformViewCreated: _onPlatformViewCreated,creation…...
idea中快速注释函数
在IntelliJ IDEA中,有多种方法可以快速注释函数。 使用快捷键 你可以使用以下快捷键来快速注释函数[3]: 行注释:使用Ctrl/(Windows系统)或Command/(Mac系统)可以在当前行前添加或删除单行注释…...
Leetcode13-罗马数字转整数
题目链接:13. 罗马数字转整数 - 力扣(LeetCode) 如同上一题,直接用暴力法破解,简单好理解 int romanToInt(char* s) {int len strlen(s);int res 0;for(int i 0; i < len; i) {switch(s[i]) {case M:res 1000…...
3、pytest实现参数化
在 pytest 中,参数化(parametrization)是一种强大的功能,可以让你用不同的输入数据重复执行同一个测试函数。这种功能非常有用,可以帮助你显著减少重复代码并提高测试覆盖率。 参数化的主要作用是: 测试多…...
深入理解指针(4)(C语言版)
文章目录 前言一、回调函数是什么(一)定义(二)工作原理(三)应用场景 二、qsort举例(一)qsort函数简介(二)比较函数的定义(三)使用示例…...
【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的日志管理:Logback 的集成
<前文回顾> 点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、开篇整…...
记录一次渗透测试/常用命令
渗透测试常用命令速览:从扫描到提权再到流量劫持 在渗透测试中,命令行工具是我们的得力助手。本文总结了我最近在测试虚拟机靶机(IP: 192.168.73.129)时用到的主要命令,涵盖网络扫描、暴力破解、权限提升、数据修改和…...
C++11QT复习(二)
文章目录 Day4-4 New 与 delete 表达式(2025.03.20)1. new 表达式的三个步骤2. delete 表达式的两个步骤3. new[] 与 delete[] Day5 类的定义和关键字再探(2025.03.24)1. C 关键字 const、static、extern2. 类的定义:C…...
Pytorch学习笔记(十)Learning PyTorch - Learning PyTorch with Examples
这篇博客瞄准的是 pytorch 官方教程中 Learning PyTorch 章节的 Learning PyTorch with Examples 部分。 官网链接:https://pytorch.org/tutorials/beginner/pytorch_with_examples.html 完整网盘链接: https://pan.baidu.com/s/1L9PVZ-KRDGVER-AJnXOvlQ?pwdaa2m…...
如何使用DeepSeek编写测试用例?
一、DeepSeek在测试用例设计中的定位 DeepSeek作为AI工具,并非直接替代测试设计,而是通过以下方式提升效率: 快速生成基础用例框架(等价类、边界值等) 智能补充易遗漏场景(如特殊字符、异常流) 自动化脚本片段生成(Python/pytest/JUnit等) 测试数据构造建议(符合业务…...
sql server如何提高索引命中率
#新星杯14天创作挑战营第9期# 前言 近期发现以前开发的系统运行缓慢,经排查,发现有很大的优化空间。数据库版本使用的是sql server,主要有以下一些问题点:数据表无索引、一些不规范的写法(例如in、大表关联࿰…...
FALL靶机
下载靶机,可以看到靶机地址 在kali上扫描靶机的端口和目录文件 访问:http://192.168.247.146/test.php,他提示我们参数缺失 我们爆破一下他的参数 使用kali自带的fuzz FUZZ就是插入参数的位置 -w 指定字典文件 wfuzz -u "http://192.…...
北斗导航 | 改进最小二乘残差法的接收机自主完好性监测算法原理,公式,应用,研究综述,matlab代码
改进最小二乘残差法的接收机自主完好性监测算法研究 摘要 本文针对传统最小二乘残差RAIM算法在复杂环境下检测性能不足的问题,提出了一种基于加权抗差估计的改进算法。通过引入IGGⅢ权函数构建抗差最小二乘模型,结合滑动窗口方差估计和自适应阈值调整机制,显著提升了算法对…...
WPF 浅述ToolTipService.ShowOnDisabled
WPF 浅述ToolTipService.ShowOnDisabled ToolTipService.ShowOnDisabled 属性可以让工具提示在控件禁用状态下仍然显示。这是一个非常方便且简洁的方式。 使用 ToolTipService.ShowOnDisabled,你可以通过设置 ToolTipService.ShowOnDisabled 属性来确保即使在控件禁…...
嵌入式硬件工程师从小白到入门-PCB绘制(二)
PCB绘制从小白到入门:知识点速通与面试指南 一、PCB设计核心流程 需求分析 明确电路功能(如电源、信号处理、通信)。确定关键参数(电压、电流、频率、接口类型)。 原理图设计 元器件选型:匹配封装、电压、…...
05 Python 元组:不可变序列的解析和应用
文章目录 前言元组定义元组的运算索引操作切片操作连接和重复运算循环遍历元组中的元素成员运算内置函数运算 打包和解包操作交换变量的值 前言 在 Python 编程领域,元组(Tuple)是一类极为重要的数据结构。它属于不可变的序列类型࿰…...
MATLAB 批量移动 TIF 文件至分类文件夹
文章目录 前言一、步骤二、代码 前言 本代码用于从指定的源文件夹 (sourceFolder) 中筛选所有 .tif 文件,并根据文件名的特定关键词(Daynight 和 FDI)将其分类移动到相应的目标文件夹 (targetDaynightFolder 和 targetFDIFolder)。 一、步骤…...
Milvus×最新版DeepSeek v3:对标Claude,本地数据五分钟写网站
前言 就在昨晚,DeepSeek v3推出了新版本V3-0324,再次一夜爆火。 虽然官方表示“这只是一次小升级”“API接口和使用方式不变”,但经过Zilliz的第一时间实测,我们发现无论是逻辑能力,还是编程能力,相较原本的…...
抽象代数:群论
系列笔记为本学期上抽象代数课整理的,持续更新。 群的相关定义 群的定义 群是一个带有满足结合律、单位元、逆元的二元运算的集合,记作 ( G , ⋅ ) \left({G, \cdot}\right) (G,⋅)。若群运算满足结合律,则该集合构成半群。如果该半群中含…...
基于 mxgraph 实现流程图
mxgraph 可以实现复杂的流程图绘制。mxGraph里的Graph指的是图论(Graph Theory)里的图而不是柱状图、饼图和甘特图等图(chart),因此想找这些图的读者可以结束阅读了。 作为图论的图,它包含点和边,如下图所示。 交通图 横道图 架构图 mxGrap…...
Stereolabs ZED Box Mini:机器人与自动化领域的人工智能视觉新选择
在人工智能视觉技术快速发展的今天,其应用场景正在持续拓宽,从智能安防到工业自动化,从机器人技术到智能交通,各领域都在积极探索如何利用这一先进技术。而 Stereolabs 推出的ZED Box Mini,正是一款专为满足这些多样化…...
音视频 二 看书的笔记 MediaPlayer
此类是用于播放声音和视频的主要 API 对方不想多说向你丢了一个链接 MediaPlayer Idle 空闲状态Initialized 初始化状态 调用 setDataSource() 时会进入此状态 setDataSource必须在Idle 状态下调用,否则就抛出异常了了了了了。Prepared 准备状态 回调监听setOnPrep…...
可以把后端的api理解为一个目录地址,但并不准确
将后端的 API 理解为一个“目录地址”是可以的,但并不完全准确。让我们更详细地解释一下。 目录 1、生动形象了解api 2、后端 API 的作用 3、可以将 API 理解为“目录地址”的原因 (1)URL 路径 (2)层次结构 4、…...
vscode连接服务器失败问题解决
文章目录 问题描述原因分析解决方法彻底删除VS Code重新安装较老的版本 问题描述 vscode链接服务器时提示了下面问题: 原因分析 这是说明VScode版本太高了。 https://code.visualstudio.com/docs/remote/faq#_can-i-run-vs-code-server-on-older-linux-distribu…...
Qt 高效读写JSON文件,玩转QJsonDocument与QJsonObject
一、前言 JSON作为轻量级的数据交换格式,已成为开发者必备技能。Qt框架为JSON处理提供了完整的解决方案,通过QJsonDocument、QJsonObject和QJsonArray三大核心类,轻松实现数据的序列化与反序列化。 JSON vs INI 特性JSONINI数据结构支持嵌…...
开源视频剪辑工具,无损编辑更高效
LosslessCut 是一款基于 FFmpeg 开发的跨平台开源视频剪辑工具,致力于无损处理音视频文件。它无需重新编码即可完成剪切、合并、轨道编辑等操作,极大地保留了原始文件的质量,特别适合处理大体积视频,如无人机拍摄素材或长时录制内…...
Git 之配置ssh
1、打开 Git Bash 终端 2、设置用户名 git config --global user.name tom3、生成公钥 ssh-keygen -t rsa4、查看公钥 cat ~/.ssh/id_rsa.pub5、将查看到的公钥添加到不同Git平台 6、验证ssh远程连接git仓库 ssh -T gitgitee.com ssh -T gitcodeup.aliyun.com...
(UI自动化测试web端)第二篇:元素定位的方法_css定位之ID选择器
看代码里的【find_element_by_css_selector( )】( )里的表达式怎么写? 文章介绍了第一种写法id选择器,其实XPath元素定位要比CSS好用,原因是CSS无法使用下标(工作当中也是常用的xpath),但CSS定位速度比XPat…...
Mysql---锁篇
1:MySQL 有哪些锁? 全局锁 flush tables with read lock 整个数据库就处于只读状态了 unlock tables 释放全局锁 全局锁主要应用于做全库逻辑备份,这样在备份数据库期间,不会因为数据或表结构的更新,而出现备份文件的数…...
Django 项目打包exe本地运行
Django 项目打包exe本地运行 记一次离谱的需求 其实本来觉得Django项目架构比较清晰,代码逻辑也简单,没打算记笔记,结果遇到离谱需求折腾了很久 开发了一个Django项目,到交付的时候了,客户说自己没有服务器… 没服务器还要登录功能😓 没办法,甲方最大,整吧 第一…...
20250330 Pyflink with Paimon
1. 数据湖 2. 本地安装Pyflink和Paimon 必须安装Python 3.11 Pip install python -m pip install apache-flink1.20.1 需要手动加入这两个jar 测试代码: import argparse import logging import sys import timefrom pyflink.common import Row from pyflink.tab…...
RTMP推流服务器nginx在linux上的编译部署
RTMP(Real-Time Messaging Protocol)推流确实需要服务器支持。RTMP推流服务器的主要功能是接收来自推流客户端的数据流,对其进行处理和转发。服务器会根据RTMP协议与客户端建立连接,处理推流数据(如转码、录制等&…...
Matlab教程001:软件介绍和界面使用
1.1 软件介绍 1.1.1 Matlab的介绍 MATLAB(MATrix LABoratory)是一款由 MathWorks 公司开发的高级编程语言和交互式环境,广泛用于 科学计算、数据分析、机器学习、工程建模、仿真和信号处理 等领域。 1.1.2 主要应用领域 数据分析与可视化…...
【SQL Server数据库备份详细教程】
🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…...
Java设计模式之解释器模式
概念 解释器模式是一种行为型设计模式,用于定义一种语言的语法规则,并提供解释器来解释该语言中的表达式。 作用 其核心作用是将复杂的语法分解为简单的语法单元,通过递归组合的方式构建抽象语法树(AST),…...
el-date-picker时间范围 编辑回显后不能修改问题
el-date-picker daterange时间范围 编辑回显后不能修改 <el-form-item:label"LABELS.gplanRecordDateLabel"prop"gplanRecordDate"><el-date-pickerstyle"width: 300px"v-model"formData.gplanRecordDate"type"daterang…...
vue复习1~45
1.关于vue 要理解记忆规则,可以到官网上去找 vue的两种使用方式 vue核心包开发 场景:局部模块改造vue核心包 & vue插件 工程化开发 场景:整站开发 2.创建vue实例 构建用户页面->创建vue实例初始化渲染 学习阶段用开发版本 3.插值…...
Servlet开发与生命周期详解-2
一、在集成开发环境当中开发Servlet程序 1.集成开发工具很多,其中目前使用比较多的是: IntelliJ IDEA(这个居多,IDEA在提示功能方面要强于Eclipse,也就是说IDEA使用起来比Eclipse更加智能,更好用。JetBrai…...
vue2项目eslint提示<template v-for> key should be placed on the <template> tag
在template标签上使用v-for时,vue2会提示key不可放在template标签上,必须放在子元素上。vue3会提示key必须放在template标签上。这时候可能我们怎么写都会触发eslint校验提醒。不影响使用,但看着难受。 我们可以在根目录上新建jsconfig.json…...
老是忘记package.json,备忘一下 webpack 环境下 Vue Cli 和 Vite 命令行工具对比
Vue 2.X webpack 环境下 Vue Cli 的命令 "scripts": {"dev": "vue-cli-service serve","prod": "vue-cli-service serve --mode production","build:dev": "vue-cli-service build --mode development"…...
关于跨域问题(本地前端访问服务器端接口跨域出错)
问题来源: 当服务器封装了接口但是本地电脑端前端访问出现跨域问题。 解决方案; 1、使用ipconfig 查看本地电脑的ip地址 ipconfig 2、在后端接口处配置如下代码 allow_origins["http://本地ip地址:3001", # 局域网内其他设备访问的本地…...
Jackson相关问题
1、json转dto的时候,dto不能定义isActive这种带有is的前缀,如果使用Lombok的Getter/Setter的话,json {"isActive": true},这样,将无法正确赋值。此时的dto再次转为json之后,得到的是active:false…...
【C++】互斥锁(Mutex)和原子操作(Atomics)
详细探讨 C 中的并发、多线程、互斥锁(Mutex)和原子操作(Atomics)的概念及其区别,并附带代码示例。 1. C 并发与多线程 (Concurrency vs. Multithreading) 并发 (Concurrency):指系统能够处理多个任务的能…...
Linux--命令行操作
一、Linux的作用 1.简单的文件操作 2.编程 3.支持系统和网络 二、多账号管理 1、我们需要在root账号下进行,可以用whoami来查询账号身份 2、adduser 你要创建的账号名 就可以创建一个账号 3、ls /home可以查看账号是否创立 4、使用passwd 创建账号名字的来设…...