InfluxDB 批量發送消息有兩種模式:定時定量(這個詞等會具體解釋)和BatchPoints。
BatchPoints是把多條資料同時設定進去,一次性發送請求。這個我現在做的項目沒用到,過兩天再單獨介紹。
對于InfluxDB的使用,肯定是大量的,請求密集,對性能要求很高。是以這個時候就要求資料的儲存盡量使用異步完成。
同樣InfluxDB也提供了這種功能,先看代碼:
引入的類:
<dependency>
<groupId>org.influxdb</groupId>
<artifactId>influxdb-java</artifactId>
<version>2.9</version>
</dependency>
應用類:
@Autowired
private InfluxDB influxDB;
@Override
public void run(String... args) throws Exception{
for (int i = 0; i< 10000; i++){
Thread.sleep(10);
Point point = Point.measurement("cpu")
.time(System.currentTimeMillis(), TimeUnit.MILLISECONDS)
.addField("num",1)
.tag("pkg",i+"")
.tag("statusCode","statusCode")
.build();
batch(point);
}
}
public void batch(Point point){
influxDB.write(point);
}
定義一個InfluxDB的bean
@Bean
public InfluxDB influxDB(){
InfluxDB influxDB = InfluxDBFactory.connect("http://localhost:8086");
influxDB.setDatabase("billingrecord")
.setRetentionPolicy("rp_90d")
.enableBatch(2000,10000, TimeUnit.MILLISECONDS);
return influxDB;
}
這裡重點說下InfluxDB bean的定義,enableBatch這裡第一個是point的個數,第二個是時間,機關毫秒,第三個時間機關一般設定成TimeUnit.MILLISECONDS就好,先不管。
point的個數和時間是聯合使用的,如果滿2000條或者10000毫秒,滿足任何一個條件就會發送一次寫的請求。