天天看點

InfluxDB Batch功能 定時定量發送請求

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毫秒,滿足任何一個條件就會發送一次寫的請求。

繼續閱讀