influxDB开发

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhengyong15984285623/article/details/60136608

influxDB

一、安装influxDB

安装环境: OS X Yosemite, 使用brew命令安装

brew install influxdb

执行结果:

➜  ~ brew install influxdb
==> Downloading https://homebrew.bintray.com/bottles/influxdb-0.13.0.yosemite.bo
######################################################################## 100.0%
==> Pouring influxdb-0.13.0.yosemite.bottle.tar.gz
==> Caveats
To have launchd start influxdb now and restart at login:
  brew services start influxdb
Or, if you don't want/need a background service you can just run:
  influxd -config /usr/local/etc/influxdb.conf
==> Summary
 /usr/local/Cellar/influxdb/0.13.0: 6 files, 48.7M
➜  ~

启动influxdb

influxd -config /usr/local/etc/influxdb.conf

执行结果ßß:

➜  ~ influxd -config /usr/local/etc/influxdb.conf

 8888888           .d888 888                   8888888b.  888888b.
   888            d88P"  888                   888  "Y88b 888  "88b
   888            888    888                   888    888 888  .88P
   888   88888b.  888888 888 888  888 888  888 888    888 8888888K.
   888   888 "88b 888    888 888  888  Y8bd8P' 888    888 888  "Y88b
   888   888  888 888    888 888  888   X88K   888    888 888    888
   888   888  888 888    888 Y88b 888 .d8""8b. 888  .d88P 888   d88P
 8888888 888  888 888    888  "Y88888 888  888 8888888P"  8888888P"

[run] 2017/03/03 11:31:41 InfluxDB starting, version 0.13.0, branch 0.13, commit e57fb88a051ee40fd9277094345fbd47bb4783ce
[run] 2017/03/03 11:31:41 Go version go1.6.2, GOMAXPROCS set to 4
[run] 2017/03/03 11:31:41 Using configuration at: /usr/local/etc/influxdb.conf
[store] 2017/03/03 11:31:41 Using data dir: /usr/local/var/influxdb/data
[subscriber] 2017/03/03 11:31:41 opened service
[monitor] 2017/03/03 11:31:41 Starting monitor system
[monitor] 2017/03/03 11:31:41 'build' registered for diagnostics monitoring
[monitor] 2017/03/03 11:31:41 'runtime' registered for diagnostics monitoring
[monitor] 2017/03/03 11:31:41 'network' registered for diagnostics monitoring
[monitor] 2017/03/03 11:31:41 'system' registered for diagnostics monitoring
[cluster] 2017/03/03 11:31:41 Starting cluster service
[shard-precreation] 2017/03/03 11:31:41 Starting precreation service with check interval of 10m0s, advance period of 30m0s
[snapshot] 2017/03/03 11:31:41 Starting snapshot service
[copier] 2017/03/03 11:31:41 Starting copier service
[admin] 2017/03/03 11:31:41 Starting admin service
[admin] 2017/03/03 11:31:41 Listening on HTTP: [::]:8083
[continuous_querier] 2017/03/03 11:31:41 Starting continuous query service
[httpd] 2017/03/03 11:31:41 Starting HTTP service
[httpd] 2017/03/03 11:31:41 Authentication enabled: false
[httpd] 2017/03/03 11:31:41 Listening on HTTP: [::]:8086
[retention] 2017/03/03 11:31:41 Starting retention policy enforcement service with check interval of 30m0s
[run] 2017/03/03 11:31:41 Listening for signals
[monitor] 2017/03/03 11:31:41 Storing statistics in database '_internal' retention policy 'monitor', at interval 10s
2017/03/03 11:31:41 Sending anonymous usage statistics to m.influxdb.com
[tsm1wal] 2017/03/03 11:31:51 tsm1 WAL starting with 10485760 segment size
[tsm1wal] 2017/03/03 11:31:51 tsm1 WAL writing to /usr/local/var/influxdb/wal/_internal/monitor/1
[shard] 2017/03/03 11:31:51 /usr/local/var/influxdb/data/_internal/monitor/1 database index loaded in 7.667µs

访问http://127.0.0.1:8083 查看是否安装成功.

二、Maven依赖

<dependency>
    <groupId>org.influxdb</groupId>
    <artifactId>influxdb-java</artifactId>
    <version>2.5</version>
</dependency>

三、Java示例

package influxdb;

import org.influxdb.InfluxDB;
import org.influxdb.InfluxDBFactory;

/**
 * Created by zhengyong on 17/3/2.
 */
public class InfluxdbBuilder {

    private String   username;
    private String   password;
    private String   url;

    private InfluxDB influxDB;

    public InfluxdbBuilder(String url, String username, String password){
        this.url = url;
        this.username = username;
        this.password = password;
    }

    public InfluxDB build() {
        if (influxDB == null) {
            synchronized (this) {
                if (influxDB == null) {
                    influxDB = InfluxDBFactory.connect(url, username, password);
                }
            }
        }
        return influxDB;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}
package influxdb;

import org.influxdb.InfluxDB;
import org.influxdb.dto.Point;
import org.influxdb.dto.Query;
import org.influxdb.dto.QueryResult;

import java.util.Map;

/**
 * influxdb操作类 <br/>
 * Created by zhengyong on 17/3/3.
 */
public class InfluxdbService {

    private String   database;
    private String   policyName;
    private InfluxDB influxDB;

    public InfluxdbService(String database, String policyName, InfluxDB influxDB){
        this.database = database;
        this.policyName = policyName;
        this.influxDB = influxDB;
    }

    /**
     * 创建数据库
     */
    public void createDatabase() {
        influxDB.createDatabase(database);
    }

    /**
     * 创建保存策略 <br/>
     * CREATE RETENTION POLICY "default" ON "influxdb-database" DURATION 30d REPLICATION 1 DEFAULT
     *
     * @param duration 存放时间 (30d)
     * @param replicationNum 备份数量
     */
    public void createRetentionPolicy(String duration, Integer replicationNum) {

        String command = String.format("CREATE RETENTION POLICY \"%s\" ON \"%s\" DURATION %s REPLICATION %s DEFAULT",
                                       policyName, database, duration, replicationNum);

        this.query(command);
    }

    /**
     * 插入数据
     *
     * @param measurement a Point in a fluent manner
     * @param tagsToAdd the Map of tags to add
     * @param fields the fields to add
     */
    public void insert(String measurement, Map<String, String> tagsToAdd, Map<String, Object> fields) {

        Point.Builder builder = Point.measurement(measurement).tag(tagsToAdd);
        if (fields != null && !fields.isEmpty()) {
            builder.fields(fields);
        }
        influxDB.write(database, policyName, builder.build());
    }

    /**
     * 查询数据
     *
     * @param command
     * @return QueryResult
     */
    public QueryResult query(String command) {
        return influxDB.query(new Query(command, database));
    }

    public InfluxDB getInfluxDB() {
        return influxDB;
    }

    public String getDatabase() {
        return database;
    }

    public String getPolicyName() {
        return policyName;
    }

}
package influxdb;

import org.apache.commons.collections.CollectionUtils;
import org.influxdb.InfluxDB;
import org.influxdb.dto.QueryResult;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Created by zhengyong on 17/3/2.
 */
public class InfluxdbTest {

    /**
     * 数据库名称
     */
    private static final String database        = "influxdb-database";

    /**
     * 数据报存策略
     */
    private static String       retentionPolicy = "default";

    public static void main(String[] args) {

        InfluxDB influxDB = new InfluxdbBuilder("http://127.0.0.1:8086", "user", "pass").build();

        InfluxdbService service = new InfluxdbService(database, retentionPolicy, influxDB);

        // 创建数据库
        service.createDatabase();

        // 创建数据保存策略
        service.createRetentionPolicy("30d", 1);

        // 插入数据
        Map<String, String> tags = new HashMap<>();
        tags.put("methodName", "getName");
        Map<String, Object> fields = new HashMap<>();
        fields.put("rt", 200);
        fields.put("tps", 300);
        service.insert("measurementKey", tags, fields);

        // 查询数据
        QueryResult queryResult = service.query("select * from \"measurementKey\"");
        List<QueryResult.Result> results = queryResult.getResults();
        if (CollectionUtils.isNotEmpty(results)) {
            for (QueryResult.Result result : results) {
                System.out.println(result.toString());
            }
        }

    }

}

四、备注

端口说明:8083端口为界面显示端口,8086端口为数据库通讯端口

参考地址:https://docs.influxdata.com/influxdb/v1.2/introduction/getting_started/

猜你喜欢

转载自blog.csdn.net/zhengyong15984285623/article/details/60136608