栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

influxdb入门

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

influxdb入门

前言

对于传统关系型数据库,增删改查应该是必备且常用的功能,而influxdb常用的只有insert和select,没有提供update语法,虽然有delete可以删除数据(delete语法和mysql相似),但是需求不大。

influxdb 相对于对监控数据的记录,用于对数据图标的展示,influxdb 2.0 版本已经更新,但由于2.0 版本与1.+ 版本相差比较大。加上对java 等相对应配套还不完善,这里都是1.+版本。

安装使用

一、下载安装

# docker启动influxdb
docker run -d -p 8083:8083 -p 8086:8086 --name my_influxdb influxdb:1.7.9

# 进入docker 容器
docker exec -it my_influxdb /bin/bash

#进入指定目录,启动客户端
cd /usr/bin
./influx

二、使用前准备工作

#创建用户名密码
create user "root" with password 'newpwd' with all privileges;

#创建数据库
CREATE DATABASE mydb;

#更改当前数据库过期策略
ALTER RETENTION POLICY "autogen" ON mydb DURATION 14d REPLICATION 1 SHARD DURATION 1d DEFAULT ;

#查看当前用户
show users;
# 查看有哪些数据库
show databases;

# 进入数据库设置名称
use 数据库名称;

influxdb保留策略

  • retention_policy_name: 策略名。
  • duration: 数据保留时长。
  • REPLICATION: 复制因子,单机版设置为1即可。
  • SHARD DURATION:设置shardGroupDuration时长,表示每个shard group时间跨度时长。可不填,默认根据RP的duration计算。
  • default: true为设置该RP为默认RP
> show users
user admin
---- -----
> create user "root" with password 'newpwd' with all privileges;
> show users;
user admin
---- -----
root true
> show databases;
name: databases
name
----
_internal
> CREATE DATABASE mydb;
> show databases;
> name: databases
name
----
_internal
mydb
> SHOW RETENTION POLICIES ON mydb;
name    duration shardGroupDuration replicaN default
----    -------- ------------------ -------- -------
autogen 0s       168h0m0s           1        true

> use mydb;
Using database mydb
> ALTER RETENTION POLICY "autogen" ON mydb DURATION 14d REPLICATION 1 SHARD DURATION 1d DEFAULT ;
> SHOW RETENTION POLICIES ON mydb;
name    duration shardGroupDuration replicaN default
----    -------- ------------------ -------- -------
autogen 336h0m0s 24h0m0s            1        true

Springboot 结合influxDb

一、引入依赖

 
            org.influxdb
            influxdb-java
            2.14
        

二、设置配置文件

influx:
  url: http://xx:8086
  user: root
  password: newpwd
  database: mydb

三、代码配置

@Component
@Configuration
@Data
public class InfluxDBConfig implements InitializingBean {

    @Value("${influx.user}")
    private String userName;

    @Value("${influx.password}")
    private String password;

    @Value("${influx.url}")
    private String url;

    //数据库
    @Value("${influx.database}")
    private String database;

    //保留策略
    private String retentionPolicy;

    private InfluxDB influxDB;

    public InfluxDBConfig(){}

    public InfluxDBConfig(String userName, String password, String url, String database) {
        this.userName = userName;
        this.password = password;
        this.url = url;
        this.database = database;
        // autogen默认的数据保存策略
        this.retentionPolicy = retentionPolicy == null || "".equals(retentionPolicy) ? "autogen" : retentionPolicy;
        this.influxDB = influxDbBuild();
    }



    
    private InfluxDB influxDbBuild() {
        if (influxDB == null) {
            influxDB = InfluxDBFactory.connect(url, userName, password);
            influxDB.setDatabase(database);
        }
        return influxDB;
    }




    @Override
    public void afterPropertiesSet() throws Exception {
        influxDbBuild();
    }
}

四、java 实现类

@Service
public class InfluxDbServiceImpl {

    @Resource
    InfluxDBConfig influxDBConfig;

    
    public void insert(String measurement, Map tags, Map fields) {
        insert(measurement, System.currentTimeMillis(), tags, fields);
    }

    
    public void insert(String measurement, long time, Map tags, Map fields) {
        Point.Builder builder = Point.measurement(measurement);
        builder.time(time, TimeUnit.MILLISECONDS);
        if(CollectionUtils.isNotEmpty(tags)){
            builder.tag(tags);
        }
        builder.fields(fields);
        InfluxDB influxDB = influxDBConfig.getInfluxDB();
        influxDB.write(influxDBConfig.getDatabase(), "", builder.build());
    }

    
    public QueryResult queryResult(String command) {
        InfluxDB influxDB = influxDBConfig.getInfluxDB();
        return influxDB.query(new Query(command, influxDBConfig.getDatabase()));
    }


    
    public List> query(String command) {
        InfluxDB influxDB = influxDBConfig.getInfluxDB();
        QueryResult query = influxDB.query(new Query(command, influxDBConfig.getDatabase()));
        return queryResultProcess(query);
    }

    
    public List> queryResultProcess(QueryResult queryResult) {
        List> mapList = new ArrayList<>();
        List resultList =  queryResult.getResults();
        //把查询出的结果集转换成对应的实体对象,聚合成list
        for(QueryResult.Result query : resultList){
            List seriesList = query.getSeries();
            if(seriesList != null && seriesList.size() != 0) {
                for(QueryResult.Series series : seriesList){
                    List columns = series.getColumns();
                    String[] keys =  columns.toArray(new String[columns.size()]);
                    List> values = series.getValues();
                    if(values != null && values.size() != 0) {
                        for(List value : values){
                            Map map = new HashMap(keys.length);
                            for (int i = 0; i < keys.length; i++) {
                                map.put(keys[i], value.get(i));
                            }
                            mapList.add(map);
                        }
                    }
                }
            }
        }
        return mapList;
    }

    
    public long countResultProcess(QueryResult queryResult) {
        long count = 0;
        List> list = queryResultProcess(queryResult);
        if(list != null && list.size() != 0) {
            Map map = list.get(0);
            double num = (Double)map.get("count");
            count = new Double(num).longValue();
        }
        return count;
    }

    
    public void createDB(String dbName) {
        InfluxDB influxDB = influxDBConfig.getInfluxDB();
        influxDB.createDatabase(dbName);
    }

    
    public void batchInsert(BatchPoints batchPoints) {
        InfluxDB influxDB = influxDBConfig.getInfluxDB();
        influxDB.write(batchPoints);
    }

    
    public void batchInsert(final String database, final String retentionPolicy,
                            final InfluxDB.ConsistencyLevel consistency, final List records) {
        InfluxDB influxDB = influxDBConfig.getInfluxDB();
        influxDB.write(database, retentionPolicy, consistency, records);
    }

    
    public void batchInsert(final InfluxDB.ConsistencyLevel consistency, final List records) {
        InfluxDB influxDB = influxDBConfig.getInfluxDB();
        influxDB.write(influxDBConfig.getDatabase(), "", consistency, records);
    }

    
    public void createRetentionPolicy() {
        String command = String.format("CREATE RETENTION POLICY "%s" ON "%s" DURATION %s REPLICATION %s DEFAULT",
                "defalut", influxDBConfig.getDatabase(), "30d", 1);
        this.query(command);
    }

}

 

五、controller

    @GetMapping("/influx")
    public void insertData(@RequestParam("language") String language,@RequestParam("addr") String addr){

        Map tagMap = new HashMap<>();
        tagMap.put("language",language);
        tagMap.put("addr",addr);
        Map fieldMap = new HashMap<>();
        fieldMap.put("value", 1234);
        fieldMap.put("id", 3);
        influxDbService.insert("influx_db", tagMap, fieldMap);

    }


    @GetMapping("/getInflux")
    public List> getInflux(){

       return influxDbService.query( "SELECT value FROM influx_db WHERe language='python'");

    }
InfluxDB HTTP 查询

influxDb也是根据http 方式提供服务的,所以我们也是可以直接可以通过http 方式连接到数据库。

curl -GET 'http://localhost:8086/query?pretty=true' --data-urlencode "db=mydb" --data-urlencode "q=SELECt value FROM influx_db WHERe language='python'"
curl -GET 'http://localhost:8086/query?pretty=true' --data-urlencode "db=mydb" --data-urlencode "q=SELECt value FROM influx_db group by language"

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号