时序数据库简介和安装

一、简介

1. 什么是时序数据库?

时序数据库是专门用于存储和处理时间序列数据的数据库系统。

时间序列数据是指按时间顺序索引的一系列数据点。每个数据点都包含:

  1. 一个时间戳:记录数据产生的时间。

  2. 一个或多个指标值:例如温度、湿度、CPU使用率、股价、销售额等。

  3. 一组标签:用于标识数据的来源和属性,例如设备ID、传感器类型、地理位置、股票代码等。

核心思想:数据是按时间流入的,查询也总是围绕时间区间展开。

2. 时序数据的特点

时序数据有其独特的模式,这与传统的关系型数据(如订单、用户信息)截然不同:

  • 海量性:数据源源不断地产生,数据量巨大。一个传感器每秒钟上报一次数据,一年就能产生3150万条记录。

  • 时效性:新数据按时间顺序追加,几乎不会有旧数据的更新或删除操作。

  • 冷热分明:越新的数据被查询和使用的频率越高(热数据),越老的数据被访问的频率越低(冷数据)。

  • 多写少读:95%以上的操作是写入(插入新的数据点),读取操作相对较少,但查询模式复杂。

  • 高并发写入:通常需要同时接收来自成千上万个设备或代理的高并发写入请求。

3. 为什么需要专门的时序数据库?

传统关系型数据库(如 MySQL, PostgreSQL)在处理时序数据时会遇到巨大挑战:

  1. 写入瓶颈:频繁的INSERT操作会产生大量写入负载,关系型数据库的B+树索引在大量写入时维护成本极高,容易成为瓶颈。

  2. 存储成本高:原始数据不经压缩直接存储,占用空间巨大。

  3. 查询效率低:基于时间的范围查询、聚合查询(如求1小时内的平均值、最大值)性能很差,尤其是在海量数据中。

  4. 数据生命周期管理困难:难以高效地自动删除过期数据(数据降采样和保留策略)。

时序数据库正是为了解决这些痛点而设计的。

4. 时序数据库的核心技术与优势

  1. 列式存储

    • 传统数据库是行式存储,一行数据(所有列)存储在一起,适合OLTP事务。

    • 时序数据库采用列式存储,将同一列的数据存储在一起。这对于聚合查询(如求所有设备在某个时间段的平均温度)极其高效,因为只需要读取特定的列,I/O效率极高。

  2. 高效压缩

    • 由于指标值在时间上通常缓慢变化或具有重复性(如true/false状态),列式存储非常适合压缩。

    • 常用的压缩算法如 Gorilla、Delta-of-delta、Simple-8b 等,可以将数据压缩到原始大小的十分之一甚至二十分之一,极大地降低了存储成本。

  3. 专为时间优化的索引

    • 时序数据库通常对时间戳建立主索引,使其能快速定位到某个时间范围内的数据。

    • 标签建立倒排索引或其他高效索引,使得能快速过滤出某个特定设备或某类设备的数据。

    • 这种“时间戳 + 标签”的索引组合,完美契合了“查询某设备在某时间段内的数据”这类典型场景。

  4. 数据降采样与保留策略

    • 保留策略:可以自动删除超过指定时间的老数据,释放存储空间。

    • 降采样:可以自动将高精度的原始数据(如每秒一次)聚合计算成低精度的数据(如每小时的平均值),并存储下来。这样在查询历史趋势时,可以使用降采样后的数据,极大地提升查询速度并节省存储空间。

  5. 强大的聚合函数和连续查询

    • 内置了大量针对时序数据的聚合函数(MEANSUMMAXMINMEDIANDERIVATIVE(求导)等)。

    • 支持连续查询,可以定期自动执行聚合查询并将结果存入另一张表,用于实现实时仪表盘或告警。

5. 常见的时序数据库

  • InfluxDB:Go语言编写,是目前最流行、生态最完善的时序数据库之一。开源版和商业版功能有差异。

  • Prometheus:CNCF毕业项目,起源于监控系统,其存储引擎是专为监控场景设计的时序数据库。是 Kubernetes 生态中的监控事实标准。

  • TimescaleDB:基于 PostgreSQL 的扩展,将其转变为一个全功能的时序数据库。优势是支持完整的SQL,能与现有PostgreSQL生态无缝集成。

  • TDengine:国产优秀的时序数据库,以其极高的性能和压缩比著称。开源版和商业版并行。

  • OpenTSDB:基于 Hadoop 和 HBase 构建,历史悠久,适合大规模集群。

  • QuestDB:一个高性能、开源的时序数据库,专注于速度和易用性。

6. 典型应用场景

  • 监控系统:IT基础设施监控(服务器CPU、内存、磁盘IO)、应用性能监控(APM)、微服务链路追踪。

  • 物联网:智能家居传感器数据、工业物联网设备状态监控、车联网车辆轨迹与状态。

  • 金融科技:实时股价、交易记录、风险控制指标、欺诈检测。

  • ** DevOps与SRE**:服务性能指标、日志事件的时间序列化分析。

  • 商业智能:网站实时访问量、广告点击率、销售额随时间的变化趋势。

总结对比

特性时序数据库传统关系型数据库
数据模型基于时间戳和标签基于行和表的关系模型
写入模式高并发、追加写入随机读写、更新、删除
存储效率极高(列式存储+高效压缩)较低
典型查询时间范围聚合、分组关联查询、事务、点查
扩展性易于水平扩展(分片)垂直扩展或复杂的分库分表

总而言之,时序数据库是应对海量时间序列数据挑战的专用工具,它在写入性能、存储成本和时序查询效率方面相比传统数据库有数量级的提升,是构建现代监控、物联网和分析系统不可或缺的基础组件。

二、安装

1. 拉取镜像


sudo docker pull apache/iotdb:1.3.2-standalone

2.启动和运行容器

注意:这个命令启动的容器不能退出终端,退出后所有表都删除了,再次登录需要重新建表。这里仅作演示用。

docker run --rm -p 6667:6667 --name iotdb apache/iotdb:1.3.2-standalone 

当控制台出现这样的提示则表明启动成功:

o.a.i.db.service.DataNode:227 - Congratulations, IoTDB DataNode is set up successfully. Now, enjoy yourself! 

下载好后,可以安装dbeaver对时序数据进行可视化操作。

3. 安装dbeaver

下载地址:https://dbeaver.io/files/7.2.5/

4. dbeaver连接iotdb

4.1 添加iotdb驱动 (数据库->驱动管理器)
4.2 建立iotdb连接
4.2.1 选中iotdb驱动
4.2.2 JDBC URL: jdbc:iotdb://ip:6667 #ip替换为数据库所在服务器的ip
默认账号 用户名: root  密码: root

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

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

相关文章

comfyUI 暴露网络restful http接口

https://zhuanlan.zhihu.com/p/686893291 暴露websocket接口。 打开开发者选项 如图

linux系统address already in use问题解决

linux系统上某个端口被占用,如何解决?1.找到占用的进程编号:netstat -tulnp | grep :80002.强制杀死该进程kill -9 80603其他说明:1.查找占用端口的进程,可以用:lsof -i :8001 # 或者使用 netstat -tulnp |…

基于SpringBoot的家政保洁预约系统【计算机毕业设计选题 计算机毕业设计项目 计算机毕业论文题目推荐】

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

【Linux系统】 4. 权限(一)

一. shell 命令及运行原理基本理解1)广义理解的操作系统包括:操作系统内核、外壳程序(shell命令行、图形化界面)、必要的软件。2)狭义的操作系统:操作系统内核。3)在用户和内核之间有一个外壳程…

6.python——字符串

python中用’ 和" "创建字符串 python的子字符串截取用[]取字符串拼接可以直接用相加。 python三引号允许一个字符串跨多行,其中无需进行转义(所见即所得)。 当你需要一块HTML或者SQL时,这时用字符串组合,特…

足球数据API接口的技术特性与应用价值分析

一、接口概述现代足球数据接口是基于RESTful架构的数据服务,通过标准化方式提供赛事相关信息。这类接口通常采用JSON格式传输数据,支持跨平台调用,为开发者提供结构化的足球赛事数据。二、数据覆盖范围主流足球数据接口通常包含以下数据类型&…

<android>反编译魔改安卓系统应用并替换

我们知道安卓系统基于稳定性、维护便利、性能优化等原因并未对原生系统apk进行混淆加密处理,由此就方便了我们反编译替换原生应用。 首先我们设备需要是root后的,我是使用的是小米5,刷的24.3版本的面具。首先我们需要取系统apk,这…

【Qt】项目的创建 and 各个控件的使用

一、项目的创建🔍然后点击新建项目。📖注意:路径不要带有中文,不然运行不了代码。📖qmake是一个构建工具,在 Qt 写的程序,设计的到一系列的 "元编程" 技术,什么是元编程技…

大模型架构演进全景:从Transformer到下一代智能系统的技术路径(MoE、Mamba/SSM、混合架构)

当前大模型发展正经历着一个关键的技术分水岭。虽然Transformer架构自2017年问世以来主导了整个AI领域,但我们正见证着多种创新架构的涌现,每种都在试图解决Transformer的固有局限。本指南将系统性地解析当前主流架构的技术原理、适用场景与发展趋势&…

画世界笔刷合集(2000 + 款):含宫崎骏森系、鸭风人像、国潮等多风格 + 视频导入教程

预览: https://blog.csdn.net/2501_93092597/article/details/151330089?spm1011.2415.3001.5331 想在画世界创作却缺适配笔刷?手动绘制森系元素、人像细节耗时久,导入笔刷总失败,找配套背景 / 配色还得跨平台搜索?这…

03-Redis 安装指南:从版本选择到多系统部署(Windows+macOS+Linux)

目录引言一、安装 Redis 前必须明确的核心问题二、Redis 版本选择:稳定版 vs 开发版,该怎么选?2.1 版本规则:看 “次版本号” 辨稳定性2.2 稳定版与开发版核心差异2.3 版本选择建议三、多系统安装教程:step-by-step 实…

普通MYSQL数据库是怎么做sum操作的

MySQL 的 SUM()操作实现是一个结合​​执行引擎优化、存储结构利用和分组算法​​的高效过程。以下是其核心实现机制和优化策略:​​1. 执行流程概览​​以查询为例:SELECT department, SUM(salary) FROM employees GROUP BY department;​​执行步骤​​…

Claude-Flow AI协同开发:基础入门之 AI编排

1.1 引言:超越“代码生成器”的革命 在AI辅助开发的浪潮中,我们已经习惯了代码补全、函数生成等“代码生成器”工具。它们极大地提升了我们的编码效率,但通常仅限于解决孤立、单一的问题。当面对一个完整的项目或一个复杂的功能模块时&#x…

Linux中下载安装部署Redis7.4.5——并设置用户名、密码及其授权的保姆级教程

一、环境准备 环境准备 序号 说明 1 使⽤RHEL9或Almalinux9.1及其更高版本系统 #查看系统信息 cat /etc/os-release 2 Linux中需要Redis源码编译所需的gcc依赖 #1-检查是否已

健康度——设备健康续航条

在故障诊断与健康管理(PHM)领域和寿命预测领域中,健康度(Health Index, HI)是一个至关重要的概念,它旨在量化设备或系统的当前健康状态,并为预测其剩余使用寿命(Remaining Useful Li…

【Python - 类库 - BeautifulSoup】(02)使用“BeautifulSoup“按类名获取内容

使用BeautifulSoup按类名获取内容 在本文中,我们将介绍如何使用BeautifulSoup按类名获取内容的方法。BeautifulSoup是一个用于解析HTML和XML文档的Python库。它可以方便地遍历和搜索文档树,使得我们能够轻松地提取想要的信息。 安装BeautifulSoup 首先&a…

36.Java序列化与反序列化是什么

36.Java序列化与反序列化是什么 序列化就是把Java对象转换成字节流(二进制)。 把对象保存到本地文件或网络传输。因为Java对象在JVM的堆内存中,JVM堆不存在了,对象也就不在了。 反序列化就是把字节流转换为对象 从文件或者网络里获…

c#泛型公共类示例

在C#中&#xff0c;泛型类是一种可以操作多种数据类型的类。这使得你可以编写更灵活、可重用的代码。泛型类通过在类名后使用尖括号<>和类型参数来定义。类型参数可以是具体的类型&#xff0c;如int或string&#xff0c;也可以是其他泛型类型&#xff0c;甚至是其他泛型类…

深入理解算法效率——时间和空间复杂度详解

目录 一、引言&#xff1a;为什么我们需要分析算法效率&#xff1f; 二、算法效率的维度 2.1 时间复杂度&#xff08;Time Complexity&#xff09; 2.2 空间复杂度&#xff08;Space Complexity&#xff09; 三、深入理解算法时间复杂度 3.1 时间复杂度的基础概念 3.2 大…

排序---冒泡排序(Bubble Sort)

一、算法核心概念 冒泡排序是一种简单的交换排序算法&#xff0c;其核心思想是&#xff1a;通过重复遍历待排序数组&#xff0c;每次比较相邻的两个元素&#xff0c;若它们的顺序错误&#xff08;如升序排序中前一个元素大于后一个&#xff09;&#xff0c;则交换它们的位置。经…