influxdb数据库操作与javaApi使用

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
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值