InfluxDB入门记录(一)

0 阅读3分钟

InfluxDB 是一款专为时序数据设计的数据库,特别适用于处理带有时间戳的连续数据,例如服务器监控指标、物联网传感器数据、日志统计、金融行情等。与传统关系型数据库(如 MySQL)不同,InfluxDB 针对高频写入、大规模数据压缩、时间范围查询和聚合分析进行了专门优化,能够高效支持“最近一小时 CPU 使用率”、“过去7天平均接口耗时”这类典型时序查询场景。

一、安装influxdb

influxdb的安装方法参考官网:安装 InfluxDB OSS v2

以本地安装为例,安装完成并成功启动后可访问 http://localhost:8086/ 可进行influxdb数据库初始配置,包括登录账号密码、初始存储桶名称、组织名称。配置完成后进入初始界面:

image.png

二、SpringBoot框架内使用influxdb

1、引入influxdb依赖

influxdb-client用于读写数据

<!--        influxDb-->
<dependency>
    <groupId>com.influxdb</groupId>
    <artifactId>influxdb-client-java</artifactId>
    <version>6.6.0</version>
</dependency>

2、通过配置类初始化influxdb client

首先需要在application.yml配置中增加 InfluxDB 的核心连接参数:

influxDb:
  url: http://127.0.0.1:8086
  token: your token
  org: your group
  bucket: your bucket name

然后增加InfluxdbClient配置类:

@Configuration
@Data
public class InfluxDBConfig {
    
    @Value("${influxDb.url}")
    public String url;
    
    @Value("${influxDb.token}")
    public String token;
    
    @Value("${influxDb.org}")
    public String org;
    
    @Value("${influxDb.bucket}")
    public String bucket;
       
    @Bean  
    public InfluxDBClient influxDBClient() {      
        return InfluxDBClientFactory.create(  
            url,  
            token.toCharArray(),  
            org,
            bucket
        );  
    }
}

InfluxDBClientFactory是创建 InfluxDB 客户端实例的工厂,调用InfluxDBClientFactory.create()创建。如需使用influxdb客户端,只需要注入influxDBClient即可。

InfluxDBClientOptions用于配置 InfluxDB 连接,如设置超时时间等参数,以OkHttpClient为例,该参数是设置用于与 InfluxDB 通信的 HTTP 客户端:

// 设置超时时间,防止过长时间的查询
OkHttpClient.Builder builder = new OkHttpClient.Builder()
        .connectTimeout(30, TimeUnit.SECONDS)
        .readTimeout(30, TimeUnit.SECONDS)
        .callTimeout(30, TimeUnit.SECONDS)
        .writeTimeout(60, TimeUnit.SECONDS);

InfluxDBClientOptions build = InfluxDBClientOptions.builder()
            .okHttpClient(builder)
            .url(url)
            .authenticateToken(token.toCharArray())
            .org(org)
            .bucket(bucket)
            .build();

return InfluxDBClientFactory.create(build);

InfluxDBClientFactory.create()更多的使用方法可参考api文档

3、存入数据

以下是使用influxDB存入数据的示例:

@Autowired
private InfluxDBClient influxDBClient;

public void test(){
    try (WriteApi writeApi = influxDBClient.makeWriteApi()) {
        Point point = Point.measurement("temperature")
                .addTag("location", "west")
                .addField("value", 55D)
                .time(Instant.now().toEpochMilli(), WritePrecision.MS);

        writeApi.writePoint(point);
    }
}

三、InfluxDB的数据存储

1、存储桶bucket

存储桶类似于MySQL中的 database,它是 database 和保留策略的集合。

Snipaste_2026-02-25_09-45-13.png

访问 http://localhost:8086/ ,可以通过前端界面创建存储桶,创建时需要设置存储桶名称和数据过期时间:

image.png

2、fields

fields 由 field key 和 field value 组成。field key 都是字符串,他们存储数据信息。以下是influxdb数据库中的一条原始数据,_field 列代表 field key ,说明该数据表示值;_value列代表 field value ,记录了数据的具体值,它可以是字符串、浮点数、整数、布尔值,但同一个 field key 存储的 field value 应保持类型相同。

image.png

field是InfluxDB数据结构所必需的一部分——在InfluxDB中不能没有field。同时需要注意的是,field是没有索引的,因此将 field value 作为过滤条件来查询效率会很低:

SELECT * FROM "test" WHERE "value" = 1

3、tags

tag 由 tag key 和 tag value 组成。tag key 和 tag value 都作为字符串存储。此处location代表 tag key ,west代表 tag value 。

image.png

tag不是必需的字段,但是因为tag具有索引,对tag的查询更快,因此tag常用于存储常用的元数据。

4、measurement

measurement作为tag,fields和time列的容器,measurement的名字是存储在相关fields数据的描述。 measurement的名字是字符串,对于一些SQL用户,measurement在概念上类似于表。

5、时间戳_time

每条数据都会有一个时间戳,如果不指定时间,则默认使用当前时间:

image.png