1.influxdb3 core简介

influxDB 3 Core 是 InfluxData 推出的新一代开源时序数据库引擎,专为实时数据处理和高性能分析设计
链接: influxdb3 core官方文档

2.引入influxdb工具包

<!-- influxdb -->
<dependency>
    <groupId>com.influxdb</groupId>
    <artifactId>influxdb3-java</artifactId>
    <version>1.3.0</version> <!-- 请使用最新的稳定版本 -->
 </dependency>

3. 配置

influxdb:
  client3:
    host: http://localhost:8181
    token: apiv3_LDZ_S1-H1e0u8fevDw43tHBso_-g9zZnugPBIs1pfdOm4zltSrAjeHYVca-8lmV-jApVna5RF6KUEBHgLXNgRw
    database: test # 你的InfluxDB 3数据库名

token生成如下

 influxdb3 create token --admin  --host https://localhost:8181

4.初始化InfluxDBClient

    @Value("${influxdb.client3.host}")
    private String host;

    @Value("${influxdb.client3.token}")
    private String token;

    @Value("${influxdb.client3.database}")
    private String database;

    private InfluxDBClient client;

    /**
     * 初始化InfluxDBClient
     */
    @PostConstruct
    public void init() {
        logger.info("Initializing InfluxDB 3 native client for host: {}, database: {}", host, database);
        try {
            this.client = InfluxDBClient.getInstance(host, token.toCharArray(), database);
            logger.info("InfluxDB 3 native client initialized successfully.");
        } catch (Exception e) {
            logger.error("Failed to initialize InfluxDB 3 native client", e);
        }
    }

5.生成数据并写入

  /**
     * 模拟生成点位
     * @return
     */
    List<IotTag> generateTagNames(int size) {
        List<IotTag> tags = new ArrayList<>();
        // 模拟生成点位
        for (int i = 0;i<size;i++) {
            IotTag iotTag = new IotTag();
            String tagName = "tag"+i;
            iotTag.setTagName(tagName);
            iotTag.setTagId(String.valueOf(i));
            iotTag.setLocation("location"+i);
            tags.add(iotTag);
        }
        return tags;
    }

    /**
     * 根据模拟点位生成模拟数据
     * @param tags
     * @return
     */
    List<IotEntity> generateDataByTagNames(List<IotTag> tags,Date recordTime) {
        List<IotEntity> result = new ArrayList<>();

        for (IotTag tag:tags) {
            Random random = new Random();
            float v = random.nextFloat();
            IotEntity iotEntity = new IotEntity();
            iotEntity.setTagId(tag.getTagId());
            iotEntity.setTagName(tag.getTagName());
            iotEntity.setEnergy("POWER");
            iotEntity.setTime(recordTime);
            iotEntity.setValue(v);
            iotEntity.setLocation(tag.getLocation());
            result.add(iotEntity);
        }
        return result;
    }
    /**
     * 生成数据并写入
     * @param recordTime
     */
    public void autoData(Date recordTime) {
        List<IotTag> tagNames = this.generateTagNames(100000);
        List<IotEntity> iotEntities = this.generateDataByTagNames(tagNames,recordTime);
        List<Point> points = new ArrayList<>();
        for (IotEntity iotEntity:iotEntities) {
            String tagId = iotEntity.getTagId();
            Float value = iotEntity.getValue();
            String energy = iotEntity.getEnergy();
            long time = iotEntity.getTime().getTime();
            String tagName = iotEntity.getTagName();
            Point point = Point.measurement("record")
                    .setTag("tag_name", tagName)
                    .setField("tag_id", tagId)
                    .setField("value", value)
                    .setField("energy", energy)
                    .setTimestamp(time, WritePrecision.MS);
            points.add(point);
        }
        long start = System.currentTimeMillis();
        client.writePoints(points);
        long end = System.currentTimeMillis();
        System.out.println("总计用时:"+(end-start));
    }

6.读取数据

public List<IotEntity> selectData() {
        List<IotEntity> result = new ArrayList<>();
        long start = System.currentTimeMillis();
        String query = "SELECT tag_id,value,energy,time,tag_name FROM record limit 100000";
        client.query(query).forEach(res-> {
            IotEntity iotEntity = new IotEntity();
            String id = res[0].toString();
            Float value = Double.valueOf(res[1].toString()).floatValue();
            String energy = res[2].toString();
            Date time = new Date(((BigInteger) res[3]).longValue()/1000);
            String tagName = res[4].toString();
            iotEntity.setTagId(id);
            iotEntity.setEnergy(energy);
            iotEntity.setValue(value);
            iotEntity.setTagName(tagName);
            iotEntity.setTime(time);
            result.add(iotEntity);
        });
        long endTime = System.currentTimeMillis();
        System.out.println("总计用时:"+(endTime-start));
        return result;
    }
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐