InfluxDB jar包提供的batchPoint写入是异步且非常快的,所以浪费时间的一个是类的分解再装填。
这里涉及到一个时间问题,System.currentTimeMillis();是需要时间的,所以这里我们只创建一次当前时间,在时间精度要求不高的情况下,我们使用time+i的方式来进行时间的写入,大大加快了写入速度且没有数据丢失。
/**
* 对list进行插入
* @param list 数据list
*/
public void insertList(List<AlarmInfluxDB> list) {
System.out.println("开始时间:" + new Date().getTime());
InfluxDB client = InfluxDBFactory.connect(openurl, username, password);
int i = 0;
BatchPoints batchPoints = BatchPoints.database(database).consistency(InfluxDB.ConsistencyLevel.ALL).build();
Long start = System.currentTimeMillis();
try {
for (AlarmInfluxDB info : list) {
Builder builder = Point.measurement(measurement);
Point point = entityGetTest(info,builder).time(start+i, TimeUnit.MILLISECONDS).build();
// Point point = entityGetTest(info,builder).time(System.currentTimeMillis(), TimeUnit.NANOSECONDS).build();
batchPoints.point(point);
i++;
//每十万条自动插入一次
if (i >= 100000) {
i = 0;
client.write(batchPoints);
batchPoints = BatchPoints.database(database).consistency(InfluxDB.ConsistencyLevel.ALL).build();
}
}
client.write(batchPoints);
System.out.println("结束时间:" + new Date().getTime() + ",i:" + i);
} catch (Exception e) {
e.printStackTrace();
}
}