时序数据库简介和安装

发布于:2025-09-08 ⋅ 阅读:(15) ⋅ 点赞:(0)

一、简介

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


网站公告

今日签到

点亮在社区的每一天
去签到