Influxdb基本操作(详细)

InfluxDB数据库的简介

InfluxDB是一个用于存储和分析时间序列数据的开源数据库,是一个基于 golang 编写,用于记录 metrics、events,进行数据分析。

主要特性有:

  1. 内置HTTP接口,使用方便
  2. 数据可以打标记,查让查询可以很灵活
  3. 类SQL的查询语句
  4. 安装管理很简单,并且读写数据很高效
  5. 能够实时查询,数据在写入时被索引后就能够被立即查出

在最新的DB-ENGINES给出的时间序列数据库的排名中,InfluxDB高居第一位,可以预见,InfluxDB会越来越得到广泛的使用。

一、与传统数据库中的名词做比较

在这里插入图片描述

二、Point
Point由时间戳(time)、数据(field)、标签(tags)组成。
Point相当于传统数据库里的一行数据,如下表所示:
在这里插入图片描述

三、增删改查操作(没有修改数据)

进入influxDB命令行

influx -precision rfc3339	

1、InfluxDB数据库操作

• 显示数据库

show databases

• 新建数据库

create database shhnwangjian

• 删除数据库

drop database shhnwangjian

• 使用指定数据库

use shhnwangjian

2、InfluxDB数据表操作

在InfluxDB当中,并没有表(table)这个概念,取而代之的是MEASUREMENTS,MEASUREMENTS的功能与传统数据库中的表一致,因此我们也可以将MEASUREMENTS称为InfluxDB中的表。

• 显示所有表

SHOW MEASUREMENTS

• 新建表
InfluxDB中没有显式的新建表的语句,只能通过insert数据的方式来建立新表。

insert disk_free,hostname=server01 value=442221834240i

insert cpu_virtual_used_num,host=1 value=4  1556593150

其中 disk_free 就是表名,hostname是索引(tag),value=xx是记录值(field),记录值可以有多个,系统自带追加时间戳

或者添加数据时,自己写入时间戳

insert disk_free,hostname=server01 value=442221834240i 1435362189575692182

• 删除表

drop measurement disk_free

3、数据保存策略(Retention Policies)

influxDB是没有提供直接删除数据记录的方法,但是提供数据保存策略,主要用于指定数据保留时间,超过指定时间,就删除这部分数据。
• 查看当前数据库Retention Policies

show retention policies on "db_name"


show retention policies on cdhnm

• 创建新的Retention Policies

create retention policy "rp_name" on "db_name" duration 3w replication 1 default

create retention policy test on cdhnm duration 1h replication 1 default

rp_name:策略名;
db_name:具体的数据库名;
3w:保存3周,3周之前的数据将被删除,influxdb具有各种事件参数,比如:h(小时),d(天),w(星期);
replication 1:副本个数,一般为1就可以了;
default:设置为默认策略

• 修改Retention Policies

alter retention policy “rp_name” on “db_name” duration 30d default


alter retention policy autogen on cdhnm duration 1h default

• 修改数据策略。

alter retention policy autogen on cdhnm duration 0h replication 1 default

• 删除Retention Policies

drop retention policy “rp_name” on “db_name"


drop retention policy test on cdhnm

4、查询数据

select * from  cpu_virtual_used_num

5、插入数据

插入数据同时创建表

insert disk_free,hostname=server01 value=442221834240i


insert cpu_virtual_used_num,host=470b14f0-e869-43ed-a8e6-fd634258271f,hostname=server01 value=0.3 1557023160 

6、删除数据

influxDB是没有提供直接删除数据记录的方法,但是提供数据保存策略,主要用于指定数据保留时间,超过指定时间,就删除这部分数据。创建新的Retention Policies

create retention policy "rp_name" on "db_name" duration 3w replication 1 default


retention policy duration must be at least 1h0m0s influxdb

数据库过期策略至少一个小时

7、查询表字段

查询tag:show tag keys from cluster_metric

查询field:show field keys from cluster_metric

四、时区问题

在使用InfluxDB时,发现由于InfluxDB使用的是UTC时间,在查询时经常会遇到时区的问题

1、时间格式

InfluxDB除了支epoch_time外,还支持rfc3339_date_time_stringrfc3339_like_date_time_string

epoch_time

理论一些的解释是从协调世界时(Thursday, 1 January 1970)开始至今过去的时间。比如我们在java程序中使用System.currentTimeMillis()得到的就是这个时间。一般情况下为毫秒级(ms)精度,即13位Long类型。而在InfluxDB中,时间戳的精度可以达到纳秒级(ns)即19位Long类型。

rfc3339_date_time_string

rfc3339时间格式是ietf协会定义的一种时间格式,这个名字是因为它被定义在rfc3339中。感兴趣的同学可以自己查看上面的连接。InfluxDB中rfc3339的时间格式是这样的:
‘YYYY-MM-DDTHH:MM:SS.nnnnnnnnnZ’
其中nnnnnnnnn是可选的,如果不写则会被设置为000000000。注意,如果使用这种时间格式,需要使用单括号(’)将时间括起来。

rfc3339_like_date_time_string

因为rfc3339_date_time_string的格式确实比较反人类,所以InfluxDB也支持这种人类阅读更友好的格式:
‘YYYY-MM-DD HH:MM:SS.nnnnnnnnn’
其中HH:MM:SS.nnnnnnnnn是可选的,如果不填写会被设置为00:00:00.000000000。所以查询时可以设置到天、小时、分钟、秒等不同精度。这种时间格式同样要求被单括号括起来。

2、调整时间戳精度

InfluxDB默认东时间是纳秒(ns),即19位时间戳。但是一般情况下时间精度不会这么高。所以如果使用秒级精度查询:
select * from cpu_virtual_used_num where time >= 1435333209s and time <= 1542964713s
如果使用毫秒级精度查询:
select * from cpu_virtual_used_num where time >= 1435333209000ms and time <= 1542964714000ms

3、调整时区

如果需要使用北京时间(东八区),可以在SQL中使用tc关键字:

select * from cpu_virtual_used_num where time >= '2018-11-23 14:30:39' and time <= '2019-11-23 14:32:32' tz('Asia/Shanghai')

4、UTC时间与Beijing时间转换

Timestamp时间列
既然是时间序列数据库,influxdb的数据都有一列名为time的列,里面存储UTC时间戳。
Influxdb时间转成北京时间:UTC time + 8 hours = Beijing time

五、sql语句

influx -precision rfc3339	

show retention policies on cdhnm

alter retention policy autogen on cdhnm duration 1h default

create retention policy test on cdhnm duration 1h replication 1 default


drop retention policy test on cdhnm 

insert cpu_virtual_used_num,host=470b14f0-e869-43ed-a8e6-fd634258271f,hostname=server01 value=0.9 1557045292000000000
    
select * from cpu_virtual_used_num where time >= '2018-11-23 14:30:39' and time <= '2019-11-23 14:32:32' tz('Asia/Shanghai')

delete from cpu_virtual_used_num

六、启动服务

切换到root用户
命令:su
输入密码:123456

启动:

sudo service influxdb start

重启:

service influxdb restart

切换到普通用户:
命令:exit

  • 7
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你好!对于Java操作InfluxDB 1.7版本,你可以使用InfluxDB Java Client来实现。以下是一些基本示例代码,帮助你开始使用: 首先,你需要在你的项目中添加InfluxDB Java Client的依赖。你可以通过Maven或Gradle来添加依赖,具体可以参考InfluxDB Java Client的官方文档。 接下来,你需要创建一个InfluxDB对象,并连接到InfluxDB服务器: ```java import org.influxdb.InfluxDB; import org.influxdb.InfluxDBFactory; public class InfluxDBExample { public static void main(String[] args) { String url = "http://localhost:8086"; String username = "your-username"; String password = "your-password"; String database = "your-database"; InfluxDB influxDB = InfluxDBFactory.connect(url, username, password); influxDB.setDatabase(database); // 这里可以进行后续的操作,如查询数据、写入数据等 } } ``` 以上代码中,你需要将`url`、`username`、`password`和`database`替换为你自己的InfluxDB服务器的相关信息。 接下来,你可以执行一些基本操作,如查询数据、写入数据等。以下是一些示例代码: 1. 查询数据: ```java import org.influxdb.InfluxDB; import org.influxdb.InfluxDBFactory; import org.influxdb.dto.Query; import org.influxdb.dto.QueryResult; public class InfluxDBExample { public static void main(String[] args) { // ... String query = "SELECT * FROM your-measurement"; QueryResult queryResult = influxDB.query(new Query(query)); // 处理查询结果 // ... } } ``` 2. 写入数据: ```java import org.influxdb.InfluxDB; import org.influxdb.InfluxDBFactory; import org.influxdb.dto.Point; import org.influxdb.dto.Query; import java.util.concurrent.TimeUnit; public class InfluxDBExample { public static void main(String[] args) { // ... String measurement = "your-measurement"; String fieldKey = "your-field"; String fieldValue = "your-value"; Point point = Point.measurement(measurement) .time(System.currentTimeMillis(), TimeUnit.MILLISECONDS) .addField(fieldKey, fieldValue) .build(); influxDB.write(database, "", point); // 写入数据成功 } } ``` 以上示例代码中的`your-measurement`、`your-field`和`your-value`需要替换为你自己的实际数据。 希望这些示例代码能帮助你开始在Java中操作InfluxDB 1.7版本。如有任何进一步的问题,请随时向我提问!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值