使用java对接influxdb3 core
使用java对接influxdb3 core数据库 并进行简单得连接写入及查询
·
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;
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)