InfluxDB学习笔记

本文详细介绍了InfluxDB时序数据库的数据保留策略,包括如何创建、更改和删除。讨论了选择合适保留时间和分片时长的重要性,并提供了Schema设计的最佳实践,强调了tag和field的使用场景。同时,概述了InfluxQL查询语句的结构和查询优化技巧,旨在帮助用户提高查询效率和降低存储成本。
摘要由CSDN通过智能技术生成

InfluxDB时序数据库

时序数据库模型
在这里插入图片描述
temperature相当于关系型数据库的表名
后面是保持key-value的属性
空格分开后面是真正的值与时间戳(最高精度到纳秒)
它是一种支持多值模型的数据库

  • 时间点(point)
  • 时间线 = measurement + tag set组合(不包含filed set)
  • 时间线数量(cardinality)
    • [measurement + tag set + field key]组合的数量
    • 计算 : Tag-Value取值的乘积*measurement数量
      • 实际场景,Tag Value取值的依赖性!

数据保留策略(Retention policies)

  • 什么是保留策略
    • 数据保留时间(最短为1小时)
    • 分片(shard)时长
  • 定义在database空间下
  • 数据清理以分片为单位
    • 分片中的所有数据过期才会删除
  • autogen默认保留策略
    • 无限制保留
    • 七天(1 week)一个分片
  • 系统默认分片时长取决于数据保留时间
    • 保留时时间 < 2天 : 1小时
    • 保留时间2天到6个月 : 1天
    • 保留时间7个月以上 : 7天

笔记:数据与分片的时间策略是不同的

保留策略的管理

  • 创建
    CREATE RETENTION POLICY <retention_policy_name> on
    <database_name> DURATION <date_duration>
    REPLICARION <n> [SHARD DURATION <shard_duration>] [DEFAULT]

注解:retention_policy_name指定一个名字存在哪个database_name库上,duration存多长时间,DEFAULT是指定策略为默认库的策略,REPLICARION是它的企业版所具有的,开源版无需指定。

  • 更改
    ALTER RETENTION POLICY <retention_policy_name> on
    <database_name> DURATION <date_duration>
    REPLICARION <n> [SHARD DURATION <shard_duration>] [DEFAULT]
  • 删除(物理删除所有数据!)
    DROP RETENTION POLICY <retention_policy_name> on
    <database_name>

保留策略的选择

  • 数据保留多久
    • 数据成本 $$$
  • 过期数据处理
    • 丢弃
    • 降采样(down-sampling)
  • 分片时长的选择
    • 长分片
      • 短时段查询处理的数据量会放大
      • 整体性能可能较好:数据冗余少,压缩率更高等
    • 短分片
      • 灵活、易管理,删除分片,增量备份
      • 更多的分片,索引和元数据的存储和管理
  • 来自InfluxData的建议
    • 分片时长:最长典型查询时间范围的两倍
    • 单个分片的数据量不要过少(>10万),也不要过多
    • 分片中单个时间线的数据量 > 1k
    • backfilling(填充历史数据):选择长分片

Schema设计

  • tagk/tagv简短
  • tag还是field?
    • tag有索引而field没有
    • tag是字符串,field支持int、float等数据类型
      • field类型在不同分片上可以不同(尽量避免)
      • 数值类型使用i后缀为整型,默认float
    • 选择使用tag如果
      • 经常查询的元数据
      • 需要 GroupBy
    • 选择使用field如果
      • 用于函数计算
      • 非字符串
  • 避免使用InfluxDB的关键字作为tag/field/measurement
  • 避免时间线膨胀(影响内存使用的最重要因素)
  • 不要在measurement名称中嵌数据:使用tag
    cpu.server-6.us.west value=4 144234982000000000(错误示例)
    cpu,host=server-6,region=us.west value=4 144234982000000000
  • tag拆分
    cpu,server=localhost.us-east value=3 144234982000000000
    cpu,server=localhost,region=us-east value=3 144234982000000000

InfluxQL查询语句

语法:
select_stmt = “SELECT” fields from_clause [into_clause] [where_clause] [group_by_clause] [order_by_clause] [limit_clause] [offset_clause] [slimit_clause] [soffset_clause] [timezone_clause]

  • SELECT_clause FROM (SELECT_statement) […]
    • FROM measurement
    • INTO user-specified measurement
    • WHERE filters
      fields
      tags
      and/or timestamps
    • GROUP BY groups query result by
      user-specified set of tags
      time interval
    • ORDER by time DESC(默认升序)

查询优化

  • 查询指定时间范围,利用数据分片减少数据访问量
  • 使用WHERE条件限制时间线
  • 尽量避免SELECT *
  • 使用子查询,突破InfluxQL语法的限制
    • 函数嵌套,仅部分函数支持嵌套,COUNT(DISTINCT())
    • 二次过滤
    • 查询阿里云文档TSDB for InfluxDB文档

参考视频链接

[阿里云]InfluxDB数据模型和实践.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值