时序数据库 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 区分。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/73786.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

E5071C数据保存教程:SNP文件/CSV导出+远程传输步骤一键收藏

Keysight E5071C 网络分析仪支持多种数据存储方式&#xff0c;以下是详细的操作步骤和注意事项&#xff1a; 1. 内部存储&#xff08;仪器内存&#xff09; 保存测量数据&#xff1a; 轨迹数据&#xff1a;按 Save/Recall → Save Trace Data → 选择存储格式&#xff08;如 …

业务相关

目录 一、Spark 1.spark主要用来计算什么&#xff1f; 随便说段代码 2.spark 运行命令说一个&#xff0c;平常用哪些参数&#xff0c;怎么考虑的 3.spark shuffle的代码有哪些&#xff0c;平日哪些操作涉及到shuffle了 4.计算中遇到最难解决的是什么&#xff1f; 5.Spark …

LLM之RAG实战(五十二)| 如何使用混合搜索优化RAG 检索

在RAG项目中&#xff0c;大模型生成的参考内容&#xff08;专业术语称为块&#xff09;来自前一步的检索&#xff0c;检索的内容在很大程度上直接决定了生成的效果&#xff0c;因此检索对于RAG项目至关重要&#xff0c;最常用的检索方法是关键字搜索和语义搜索。本文将分别介绍…

[学成在线]07-视频转码

视频转码 视频上传成功后需要对视频进行转码处理。 首先我们要分清文件格式和编码格式&#xff1a; 文件格式&#xff1a;是指.mp4、.avi、.rmvb等这些不同扩展名的视频文件的文件格式 &#xff0c;视频文件的内容主要包括视频和音频&#xff0c;其文件格式是按照一定的编码…

Leetcode算法方法总结

1. 双指针法解决链表/数组题目 只要数组有序&#xff0c;就要想到双指针做法。还有二分法 回文串一般也会用到双指针&#xff0c;回文串的长度由于可能是奇数也可能是偶数&#xff0c;所以在寻找时&#xff0c;既需要寻找奇数长度的回文串&#xff0c;也需要寻找偶数长度的回文…

一周掌握Flutter开发--9. 与原生交互(上)

文章目录 9. 与原生交互核心场景9.1 调用平台功能&#xff1a;MethodChannel9.1.1 Flutter 端实现9.1.2 Android 端实现9.1.3 iOS 端实现9.1.4 使用场景 9.2 使用社区插件9.2.1 常用插件9.2.2 插件的优势 总结 9. 与原生交互 Flutter 提供了强大的跨平台开发能力&#xff0c;但…

基于Flask的通用登录注册模块,并代理跳转到目标网址

实现了用户密码的加密&#xff0c;代理跳转到目标网址&#xff0c;不会暴露目标路径&#xff0c;未登录的情况下访问proxy则自动跳转到登录页&#xff0c;使用时需要修改配置项config&#xff0c;登录注册页面背景快速修改&#xff0c;可以实现登录注册模块的快速复用。 1.app…

Java课程设计(双人对战游戏)持续更新......

少废话&#xff0c;当然借助了ai&#xff0c;就这么个实力&#xff0c;后续会逐渐完善...... 考虑添加以下功能&#xff1a; 选将&#xff0c;选图&#xff0c;技能&#xff0c;天赋&#xff0c;道具&#xff0c;防反&#xff0c;反重力&#xff0c;物理反弹&#xff0c;击落…

Ai工作流工具有那些如Dify、coze扣子等以及他们是否开源

Dify &#xff08;https://difycloud.com/&#xff09; 核心定位&#xff1a;专业级 LLM 应用开发平台&#xff0c;支持复杂 AI 工作流构建与企业级管理。典型场景&#xff1a;企业智能客服、数据分析系统、复杂自动化流程构建等。适合需要深度定制、企业级管理和复杂 AI 逻辑…

Debezium系列之:使用Debezium和Apache Iceberg构建数据湖

Debezium系列之:使用Debezium和Apache Iceberg构建数据湖 Debezium Server Iceberg“Debezium Server Iceberg” 消费者设置数据复制Upsert 模式保留已删除的记录使用Upsert模式追加模式优化批处理大小在数据分析的世界中,数据湖是存储和管理大量数据以满足数据分析、报告或机…

docker run -p 5000:5000 my-flask-app

docker run -p 5000:5000 my-flask-app代码的意思是&#xff1a; 运行 my-flask-app 容器&#xff0c;并把 Flask 服务器的 5000 端口映射到本机的 5000 端口。 拆解解释 docker run -p 5000:5000 my-flask-app✅ docker run → 运行一个 Docker 容器 ✅ -p 5000:5000 → 端口…

高光谱工业相机+LED光源系统助力材料分类和异物检测、实现高速在线检测

检测光源包括可见光&#xff0c;如红光、蓝光和绿光以及其他波长的光&#xff0c;如紫外和红外波长&#xff0c;可以选择与检测对象物相应的波长。但由于能够照射的波长较窄&#xff0c;例如受到同色异物混入或多个素材的材质分类等&#xff0c;可能需要使用可照射多种波长的光…

Spring 拦截器(Interceptor)与过滤器(Filter)对比

Spring 拦截器&#xff08;Interceptor&#xff09;与过滤器&#xff08;Filter&#xff09;对比 核心对比表格 对比维度拦截器&#xff08;Interceptor&#xff09;过滤器&#xff08;Filter&#xff09;定义Spring MVC 提供的组件&#xff0c;集成于 Spring 处理器链。Servl…

VulnHub-FALL通关攻略

第一步&#xff1a;确定靶机IP为192.168.40.129 第二步&#xff1a;扫描后台及开放端口 #开放端口 22 --- ssh 25 --- SMTP简单邮件传输协议 80 --- HTTP万维网传输信息协议 110 --- POP3邮件协议3 139 --- NetBIOS服务 443 --- https服务 445 --- SMB协议 3306 --- Mysql 808…

Qt 线程和 QObjects

线程和 QObjects QThread 继承于 QObject。 它发出信号来指示线程开始或结束执行&#xff0c;并提供一些插槽。 更有趣的是&#xff0c;QObjects 可以在多个线程中使用&#xff0c;发出信号以调用其他线程中的插槽&#xff0c;并向 "生活 "在其他线程中的对象发布事件…

华为、浪潮、华三链路聚合概述

1、华为 链路聚合可以提高链路带宽和链路冗余性。有三种类型&#xff0c;分别是手工链路聚合&#xff0c;静态lacp链路聚合&#xff0c;动态lacp链路聚合。 手工链路模式&#xff1a;也称负载分担模式&#xff0c;需手动指定链路&#xff0c;各链路之间平均分担流量。静态LAC…

HarmonyOS NEXT 鸿蒙中关系型数据库@ohos.data.relationalStore API 9+

核心API ohos.data.relationalStore API 9 数据库 数据库是存储和管理数据的系统 数据库&#xff08;Database&#xff09;是一个以特定方式组织、存储和管理数据的集合&#xff0c;通常用于支持各种应用程序和系统的运行。它不仅是存放数据的仓库&#xff0c;还通过一定的…

步进电机 cia402协议 报文自己的理解 (笔记)

1. cai402 协议是什么 CiA 402 协议&#xff08;CAN in Automation 402&#xff09;&#xff0c;它是工业自动化领域中的一种通信协议&#xff0c;主要用于运动控制&#xff08;如伺服驱动器、步进电机等&#xff09;&#xff08; &#xff09;所属标准 CiA 402 是 CANopen 应用…

鸿蒙摄像机,一场智能安防的“平权革命”

2025的春天&#xff0c;全国各行各业都感受到了普惠AI的魅力。大模型带来的技术平权&#xff0c;让每一个人都能轻松用上AI。 这时候&#xff0c;企业想知道&#xff0c;每时每刻离不开的摄像机&#xff0c;究竟什么时候才能迎来智能技术的平权与普惠。 博思数据研究中心的一份…

解决HuggingFaceEmbeddings模型加载报错:缺少sentence-transformers依赖包

遇到报错 报错信息: Error loading model: Could not import sentence_transformers python package. Please install it with pip install sentence-transformers. 装包信息&#xff1a; pip install modelscope langchain sentence_transformers langchain-huggingface on…