做门户网站起什么域名好网站外链发布平台
前言
使用时序数据库influxdb时,我们经常需要写入大量的数据。而单单使用influxDB.write(Point)进行单条写入时,速度过慢,无法支撑时序数据大量写入的速度。
所以我们需要采用批量的方式进行存储,增加写入的速度。
一、使用什么方法
influxDB.write(BatchPoints batchPoints)
二、使用步骤
1.引入库
<dependency><groupId>org.influxdb</groupId><artifactId>influxdb-java</artifactId><version>2.10</version></dependency>
2.创建influxdb连接
private static String openurl = "http://127.0.0.1:10002";//连接地址
private static String username = "admin";//用户名
private static String password = "abc_123";//密码
private static String database = "test";//数据库InfluxDB influxDB = InfluxDBFactory.connect(openurl, username, password);
influxDB.createDatabase(database);
3.创建Point
Point point = Point.measurement(measurement).time(System.currentTimeMillis(), TimeUnit.MILLISECONDS)//tag属性——只能存储String类型.tag("label", "label")//field存储数据.addField("value", 1).addField("rt", "rt").build();
4.创建BatchPoints并添加Point
BatchPoints batchPoints = BatchPoints.database("db2019").build();
batchPoints.point(point);
5.写入influxdb
influxDB.write(batchPoints);
三、示例
package org.example.influx;import org.influxdb.InfluxDB;
import org.influxdb.InfluxDBFactory;
import org.influxdb.dto.BatchPoints;
import org.influxdb.dto.Point;import java.util.concurrent.TimeUnit;public class InfluxDBBatchWriter243 {private static String openurl = "http://10.16.8.243:8086";//连接地址private static String username = "admin";//用户名private static String password = "douzhi+FANGFA1";//密码private static String database = "db2019";//数据库private static Point createPoint(long time){Point point = Point.measurement("test2").addField("group__tag1", "297af48c06a74220aff4fcc6bcaa44c9kg").tag("host", "changdong").time(time, TimeUnit.MILLISECONDS).build();return point;}public static void main(String[] args) throws InterruptedException {InfluxDB influxDB = InfluxDBFactory.connect(openurl, username, password);influxDB.createDatabase(database);long time1 = System.currentTimeMillis();while (true) {BatchPoints batchPoints = BatchPoints.database("db2019").build();//将单条数据存储到集合中for (int i = 0; i < 1000; i++) {time1 = time1 + 1;batchPoints.point(createPoint(time1));}long startTime = System.currentTimeMillis();influxDB.write(batchPoints);long endTime = System.currentTimeMillis();System.out.println("当前时间:" +endTime+ ", 写入时间:" +time1+ ", 写入用时" + (endTime - startTime) + "毫秒");Thread.sleep(1010);}}
}