1、influxdb使用的是类sql语句,使用时需要了解一下,我主要使用创建库和处理保存策略部分:
展示库下保存策略
show retention policies on testinfluxdb64
更新
ALTER RETENTION POLICY "default" ON "testinfluxdb64" DURATION 4h
删除
drop retention POLICY "default" ON "testinfluxdb64"
新建default保存策略,并设置为默认保存策略
CREATE RETENTION POLICY "default" ON "testinfluxdb64" DURATION 0h REPLICATION 1 DEFAULT
注意:influxdb在读写时如果不指定保存策略都是使用的默认保存策略,因为是云服务所有直接使用默认保存策略,用户不感知
2、javaApi操作:
①创建连接
OkHttpClient.Builder pool = new OkHttpClient.Builder()
.connectionPool(new ConnectionPool());
InfluxDB influxDb = InfluxDBFactory.connect(url, username, password, pool);
②创建数据库
influxDb .createDatabase(dbName);
③操作保存策略
设置默认保存策略,如果用户指定则根据用户数据,不指定则设置为永久保存
String command = String.format("CREATE RETENTION POLICY \"%s\" ON \"%s\" DURATION %s REPLICATION %s DEFAULT",
"defalut", dbName, StringUtils.isEmpty(timeStrategy) ? "0d" : timeStrategy.concat("d"), 1);
influxDB.query(new Query(command));
④修改保存策略
注意:在 InfluxDB 中按照数据的时间戳所在的范围,会去创建不同的 shard(分片),而shard受到Shard duration(碎片持续时间)的影响。
因此保存策略的设置的值不能小于Shard duration,不能让保存策略比碎片持续时间短,因此如果之前设置的碎片保存时间较大,保存策略达不到用户指定的保存策略,此时只能将保存策略同时设置小。
public void alterRetetionPolicy(InfluxDB influxDB, String dbName, String time){
//ALTER RETENTION POLICY "2_hours" ON "telegraf" DURATION 4h SHARD DURATION 4h DEFAULT修改保存策略同时修改分片时间
String alterCommand;
if (StringUtils.isEmpty(time))
//为空设置为0(永久保存),分片时间设置为7天
alterCommand = String.format("ALTER RETENTION POLICY \"%s\" ON \"%s\" DURATION %s SHARD DURATION %s",
"defalut", dbName,"0d","7d");
else {
//获取分片时间
String shardDuration = getShardDuration(time);
alterCommand = String.format("ALTER RETENTION POLICY \"%s\" ON \"%s\" DURATION %s SHARD DURATION %s",
"defalut", dbName, time + "d", shardDuration);
}
log.info("修改保存策略:{}",alterCommand);
influxDB.query(new Query(alterCommand));
}
private String getShardDuration(String time) {
int intTime = Integer.parseInt(time);
if (intTime < 2)
return "1h";
else if (intTime <= 180)
return "1d";
else
return "7d";
}
getShardDuration方法中SHARD DURATION的值使用的是influxdb本身自带的设置策略即是根据保存策略大小来确定大小:
保存策略 | SHARD DURATION |
---|---|
< 2天 | 1h |
2天-6个月 | 1d |
>6个月 | 7d |