influxdb时序数据库,查询,批量插入实例

本文介绍了一种使用Java操作InfluxDB的方法,包括连接数据库、批量插入数据、执行查询等核心功能,并提供了完整的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



如红框为influxdb使用jar包。

——influxdb工具类——
package com.sqlServerToInfluxdb.jdbc;
import java.util.Map;
import org.influxdb.InfluxDB;
import org.influxdb.InfluxDBFactory;
import org.influxdb.dto.Point;
import org.influxdb.dto.Point.Builder;
import org.influxdb.dto.Pong;
import org.influxdb.dto.Query;
import org.influxdb.dto.QueryResult;
/**
 * 时序数据库 influxdb 连接
 * 
 * */
public class influxdbJDBC {
 
  private String username = "admin";//用户名
  private String password = "admin";//密码
  private String openurl = "http://127.0.0.1:8086";//连接地址
  private String database = "energy_db";//数据库
  //private String measurement = "sys_code";//表
  
  private InfluxDB influxDB;
  
  public influxdbJDBC() {
   influxDbBuild();
   createRetentionPolicy();
  }
  
  /**连接时序数据库,获取influxDB**/
  public InfluxDB influxDbBuild() {
   influxDB = InfluxDBFactory.connect(openurl, username, password);
   Pong pong = influxDB.ping();
   if(pong != null){
    System.out.println("pong:" + pong + ",连接成功!");
   }else{
    System.out.println("连接失败");
    return null;
   }
   influxDB.createDatabase(database);
   return influxDB;
  }
  
  /*
   * 设置数据保存策略
   * defalut 策略名 /database 数据库名/ 30d 数据保存时限30天/ 1  副本个数为1/ 结尾DEFAULT 表示 设为默认的策略
   * */
  public void createRetentionPolicy() {
   String command = String.format("CREATE RETENTION POLICY \"%s\" ON \"%s\" DURATION %s REPLICATION %s DEFAULT", "defalut",database,"30d",1);
   this.query(command);
  }
  
  /*
   * 查询
   * @param command 查询语句
   * @return
   * */
  public QueryResult query(String command) {
   Query query = new Query(command, database);
   QueryResult a = influxDB.query(query);
   return a;
  }
  
  /*
   * 插入
   * @param measurment 表
   * @param tags 标签
   * @param fields 字段
   * */
  public void insert(String measurement,Map<String, String> tags, Map<String, Object> fields) {
   Builder builder = Point.measurement(measurement);//源码讲表名赋值到类中
   builder.tag(tags);//源码对标签进行验证,不得有空
   builder.fields(fields);//源码将数据值赋值到类中
   
   influxDB.write(database, "", builder.build());//向数据库写数据,builder.build():验证表名不得为空,field数据长度大于0。
  }
  
  /* 
      * 删除 
      * @param command 删除语句 
      * @return 返回错误信息 
      */
  public String deleteMeasurementData(String command) {
   QueryResult result = influxDB.query(new Query(command, database));
   return result.getError();
  }
  
  /* 
      * 创建数据库 
      * @param dbName 
      */
  public void creatDB(String dbName) {
   influxDB.createDatabase(dbName);
  }
  
  /*
      * 删除数据库 
      * @param dbName 
      */
  public void deleteDB(String dbName) {
   influxDB.deleteDatabase(dbName);
  }
}


————influxdb批量插入数据————自己数据为从sqlserver中获取,可自行定义————

public static void main(String[] args) throws Exception {
  //sqlserver获取数据
  sqlServerJDBC sqlJDBC = new sqlServerJDBC();
  String sql = "select top(100) ATime,TagID,nValue from Tag20171202 ORDER BY TagID,ATime";
  List<Map<String, String>> sqlserverlist = sqlJDBC.query(sql);
  System.out.println("开始时间:" + new Date().getTime());
  //创建influxdb连接对象
  InfluxDB client = InfluxDBFactory.connect("http://localhost:8086","admin","admin");
  
  int i = 0;//控制循环,批量存储,每10万条数据存储一次
  //声明influxdb批量插入数据对象
  BatchPoints batchPoints = BatchPoints
    .database("energy_db")
    .consistency(InfluxDB.ConsistencyLevel.ALL)
    .build();
  //遍历sqlserver获取数据
  for(Map<String, String> map : sqlserverlist){
    //创建单条数据对象——表名
    Point point = Point.measurement("influxdb")
      //tag属性——只能存储String类型
      .tag("TAG_TAGID", map.get("tagid"))
      .tag("TAG_ATIME", map.get("atime").substring(0,11))
      //field存储数据
      .addField("FIELDS_NVALUE", map.get("nvalue"))
      .addField("FIELDS_ATIME", String.valueOf(i))
      .build();
    //将单条数据存储到集合中
    batchPoints.point(point);
    i++;
   //每读取十万条数据提交到influxdb存储一次
   if(i / 100000 == 1){
    i = 0;
    client.write(batchPoints);
    batchPoints = BatchPoints
      .database("energy_db")
      .consistency(InfluxDB.ConsistencyLevel.ALL)
      .build();
   }
  }
  client.write(batchPoints); 
  System.out.println("结束时间:" + new Date().getTime() + ",i:");
 }

————influxdb查询————
public static void main(String[] args) {
  influxdbJDBC infJDBC = new influxdbJDBC();
  
  String sql = "select * from influxdb";
  QueryResult results = infJDBC.query(sql);
  if(results.getResults() == null){
   System.out.println("数据为空!");
   return;
  }
  List<dataInfo> lists = new ArrayList<dataInfo>();
  for(Result result : results.getResults()){
   List<Series> series = result.getSeries();
   for(Series serie : series){
    List<List<Object>> values = serie.getValues();//字段字集合
    List<String> colums = serie.getColumns();//字段名
    System.out.println("colums:" + colums);
    for(List<Object> n : values){
     System.out.println("value:" + n);
    }
    //lists.addAll(getQueryData(colums,values));
   }
   System.out.println("数据长度:" + series.size());
  }
  
 } 



<think>好的,用户想了解或使用InfluxDB,需要相关的使用指南或教程。首先,我需要根据提供的三个引用内容来整理相关信息,确保回答结构清晰,并且符合用户的要求。 首先,用户提到的三个引用都是关于InfluxDB的安装、配置和基础操作的。引用[1]提到了InfluxDB的配置文件和命令行启动步骤,引用[2]详细介绍了基础概念和操作命令,引用[3]则是一个UI管理工具InfluxDB Studio的安装和使用教程。我需要将这些内容整合起来,分步骤指导用户。 接下来,用户希望得到使用指南或教程,所以应该按照安装配置、基础概念、基础操作、可视化工具的顺序来组织内容。同时,用户的问题可能涉及到如何开始使用InfluxDB,包括安装、配置、数据操作和管理界面,所以需要覆盖这些方面。 需要检查每个步骤是否引用了正确的来源。比如,安装InfluxDB的部分应引用引用[1]和[2],配置部分引用[1],基础概念引用[2],操作命令也是引用[2],而InfluxDB Studio的安装和使用则引用[3]。 另外,用户可能对基础概念不太熟悉,因此需要详细解释Measurement、Point、Tag等术语,确保用户理解。在操作部分,需要提供具体的命令示例,比如创建数据库插入数据、查询数据等,这些都是用户实际使用时会用到的。 最后,生成的相关问题需要围绕用户可能进一步关心的内容,比如性能优化、查询语言、与其他数据库对比等,确保覆盖用户可能的后续疑问。 需要确保回答中使用正确的LaTeX格式,但根据用户的问题,可能数学公式较少,重点在于代码块和命令示例。因此,代码部分要使用正确的格式,如代码块包裹在三个反引号中,并注明语言类型。 最后检查是否所有引用都正确标注,例如配置文件修改和启动步骤来自引用[1],基础概念来自引用[2],管理工具来自引用[3]。确保没有遗漏任何关键点,并且回答结构清晰,步骤明确,用户能够按照指引逐步操作。</think>### InfluxDB 使用指南与教程 #### 一、InfluxDB 安装与配置 1. **安装步骤** - 根据操作系统选择对应安装包(Windows/Linux/macOS),可通过官网或包管理器下载[^1] - 示例(Ubuntu): ```bash wget https://dl.influxdata.com/influxdb/releases/influxdb_2.7.1_amd64.deb sudo dpkg -i influxdb_2.7.1_amd64.deb ``` 2. **配置文件修改** - 修改 `influxdb.conf` 配置端口、存储路径等参数[^1] - 关键配置项: ```toml [http] enabled = true bind-address = ":8086" ``` 3. **启动服务** - 通过命令行启动: ```bash influxd --config /etc/influxdb/influxdb.conf ``` #### 二、基础概念(核心术语)[^2] 1. **Database**:数据存储的逻辑容器,类似关系型数据库中的库 2. **Measurement**:类似表,存储同一类时序数据(如 `cpu_usage`) 3. **Point**:单条数据记录,包含以下要素: - **Timestamp**:时间戳(主索引) - **Tags**:标签键值对(用于高效查询,如 `host=server01`) - **Fields**:实际指标值(如 `value=0.64`) 4. **Retention Policy**:数据保留策略,定义数据存储时长和副本数 #### 三、基础操作命令 1. **数据库操作** ```sql CREATE DATABASE mydb -- 创建数据库 USE mydb -- 切换数据库 DROP DATABASE mydb -- 删除数据库 ``` 2. **写入数据** ```sql INSERT cpu_usage,host=server01 value=0.64 -- 插入一条数据(Measurement为cpu_usage) ``` 3. **查询数据** ```sql SELECT * FROM cpu_usage WHERE host='server01' AND time > now() - 1h ``` #### 四、可视化工具 InfluxDB Studio[^3] 1. **安装步骤** - 下载地址:https://gitcode.com/gh_mirrors/in/InfluxDBStudio - 支持 Windows/macOS,提供图形化界面管理数据库查询数据 2. **核心功能** - 连接多个 InfluxDB 实例 - 实时数据可视化与导出 - 执行批量数据操作
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值