influxdb使用

基础概念

与常见的数据库的对比

  • 概念名称   Influxdb                    关系型数据库
    数据库      database                    database
    表             measurement             table
    行             points                         row
    列             tag,field,timestamp    column

InfluxDB独有的概念

  • Point: 代表一行的数据,由时间戳(time)、数据(field)和标签(tags)组成

  • tag sets: tags在InfluxDB中会按照字典序排序,不管是tag-key还是tag-value,只要不一致就分别属于两个key

  • tag: 标签,表名+tag一起作为数据库的索引是“key-value”的形式

  • field name: InfluxDB支持一条数据插入多个fieldName。但实际存储中还是被当做多条数据存储

  • timestamp: 每一条数据都需要指定一个时间戳,在 TSM 存储引擎中会特殊对待,以为了优化后续的查询操作

  • Series: 相当于是 InfluxDB 中一些数据的集合,在同一个 database 中,retention policy、measurement、tag sets 完全相同的数据同属于一个 series,同一个 series 的数据在物理上会按照时间顺序排列存储在一起

  • retention policy: 存储策略,用于设置数据保留的时间,每个数据库刚开始会自动创建一个默认的存储策略 autogen,数据保留时间为永久,之后用户可以自己设置,例如保留最近2小时的数据。插入和查询数据时如果不指定存储策略,则使用默认存储策略,且默认存储策略可以修改。InfluxDB 会定期清除过期的数据

  • Shard: 在 InfluxDB 中是一个比较重要的概念,它和 retention policy 相关联。每一个存储策略下会存在许多 shard,每一个 shard 存储一个指定时间段内的数据,并且不重复,例如 7点-8点 的数据落入 shard0 中,8点-9点的数据则落入 shard1 中。每一个 shard 都对应一个底层的 tsm 存储引擎,有独立的 cache、wal、tsm file

TSM存储引擎组成

TSM 存储引擎主要由几个部分组成: cache、wal、tsm file、compactor


image.png

Shard

  • shard 并不能算是其中的一个组件,因为这是在 tsm 存储引擎之上的一个概念。在 InfluxDB 中按照数据的时间戳所在的范围,会去创建不同的 shard,每一个 shard 都有自己的 cache、wal、tsm file 以及 compactor,这样做的目的就是为了可以通过时间来快速定位到要查询数据的相关资源,加速查询的过程,并且也让之后的批量删除数据的操作变得非常简单且高效。

  • 在 InfluxDB 中,通过 retention policy 设置数据的保留时间,当检测到一个 shard 中的数据过期后,只需要将这个 shard 的资源释放,相关文件删除即可,这样的做法使得删除过期数据变得非常高效。

Cache

  • cache 中的数据并不是无限增长的,有一个 maxSize 参数用于控制当 cache 中的数据占用多少内存后就会将数据写入 tsm 文件。

  • 如果不配置的话,默认上限为 25MB,每当 cache 中的数据达到阀值后,会将当前的 cache 进行一次快照,之后清空当前 cache 中的内容,再创建一个新的 wal 文件用于写入,剩下的 wal 文件最后会被删除,快照中的数据会经过排序写入一个新的 tsm 文件中。

WAL

  • wal 文件的内容与内存中的 cache 相同,其作用就是为了持久化数据,当系统崩溃后可以通过 wal 文件恢复还没有写入到 tsm 文件中的数据。

  • 由于数据是被顺序插入到 wal 文件中,所以写入效率非常高。但是如果写入的数据没有按照时间顺序排列,而是以杂乱无章的方式写入,数据将会根据时间路由到不同的 shard 中,每一个 shard 都有自己的 wal 文件,这样就不再是完全的顺序写入,对性能会有一定影响。看到官方社区有说后续会进行优化,只使用一个 wal 文件,而不是为每一个 shard 创建 wal 文件。

  • wal 单个文件达到一定大小后会进行分片,创建一个新的 wal 分片文件用于写入数据。

STM file

  • 单个 tsm file 大小最大为 2GB,用于存放数据。

  • TSM file 使用了自己设计的格式,对查询性能以及压缩方面进行了很多优化,在后面的章节会具体说明其文件结构。

Compactor

  • compactor 组件在后台持续运行,每隔 1 秒会检查一次是否有需要压缩合并的数据。

  • 主要进行两种操作,一种是 cache 中的数据大小达到阀值后,进行快照,之后转存到一个新的 tsm 文件中。

  • 另外一种就是合并当前的 tsm 文件,将多个小的 tsm 文件合并成一个,使每一个文件尽量达到单个文件的最大大小,减少文件的数量,并且一些数据的删除操作也是在这个时候完成

常用命令

  • 显示数据库
show databases
  • 新建数据库
create database <数据库名称>
create database test #没有报错表示执行成功,test是数据库名称
  • 删除数据库
drop database test  #区分大小写,test是数据库名称
  • 使用指定的数据库
use device
  • 显示所有表
show measurements
  • 新建表
insert device_temperature,device_id=001 value=35
  • 没有特定的建表语句所以插入时就会建表
  • device_temperature 是表名
  • device_id=001是索引tag
  • value=35是记录值field,可以是多个记录值
  • 添加数据时会自动写入时间戳,也可以自己指定时间戳
insert device_temperature,device_id=001 value=35 1435362189575692182
  • 删除表
drop measurement device_temperature
  • 显示数据保留策略
show shards #显示当前所有shared数据文件和他们的过期时间
show retention policies on test #test是数据库名称
  • 创建数据库保留策略
create retention policy "rp_name" on "db_name" duration 3w replication 1 default
  • rp_name: 保留策略名称
  • db_name: 数据库名称
  • duration 3w: 3周,近3周之前的数据会被删除,还支持小时(h),天(d),星期(w),分钟(m),秒(s),为0的话表示永久保存
  • replication: 副本的个数,这里是1
  • default:是否是默认策略
  • 修改数据库保留策略
alter retention policy "rp_name" on "db_name" duration 30d default
  • 删除数据库保留策略
drop retention policy "rp_name" on "db_name"

查询语句

  • 数据查询

select * from device_temperature #查询此表所有数据
#当然可以加limit限制查询的条数,可以按照time进行排序
select * from /.*/ LIMIT 1 #查询此数据库所有表的第一条记录
select * from  device."rp_3w".device_temperature
delete from "device_temperature" #删除表所有数据,则表就不存在了
drop MEASUREMENT "device_temperature"   #删除表(注意会把数据保留删除使用delete不会)

表信息查询

show measurements #查看表
show FIELD KEYS from measurement_name #查看字段key
show series from measurement_name #查看key数据
show tag keys from device_temperature #查看tag keys
show tag values from device_temperature with key=device_id #查看tag values 必须制定tag key

用户管理命令

SHOW USERS #查看用户
CREATE USER test WITH PASSWORD '123456' #创建普通用户
CREATE USER test2 WITH PASSWORD '123456' WITH ALL PRIVILEGES #创建admin用户
REVOKE ALL PRIVILEGES FROM test2 #取消权限赋予
REVOKE READ ON mydb FROM test #取消test用户的读权限
SHOW GRANTS FOR test #展示test用户的权限
GRANT ALL ON mydb TO test #授予admin权限
GRANT READ ON mydb TO test #授权test在数据库中的读权限

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,284评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,115评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,614评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,671评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,699评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,562评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,309评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,223评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,668评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,859评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,981评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,705评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,310评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,904评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,023评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,146评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,933评论 2 355