influxdb写入数据

上一节课,学习了使用命令行写入数据,这节课,我们学习使用Rest接口写入数据。

Rest接口比较简单,大家按照我们的方式做就可以了。但是必须确保,你自己安装了Influxdb,如果没有安装,请查看InfluxDb的简单安装

使用HTTP接口创建数据库

使用POST方式发送到URL的/query路径,参数q为CREATE DATABASE ,下面的例子发送一个请求到本地运行的InfluxDB创建数据库mydb:

curl -i -XPOST http://localhost:8086/query --data-urlencode "q=CREATE DATABASE mydb"

curl -i 参数表示将显示请求和响应http协议信息。

curl -X 参数表示请求协议。

--data-urlencode 表示请求的参数进行url编码

执行如下图:

使用HTTP接口写数据

通过HTTP接口POST数据到/write路径是我们往InfluxDB写数据的主要方式。下面的例子写了一条数据到mydb数据库。这条数据的组成部分是measurement为cpu_load_short,tag的key为host和region,对应tag的value是server01和us-west,field的key是value,对应的数值为0.64,而时间戳是1434055562000000000。

curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'cpu_load_short,host=server01,region=us-west value=0.64 1434055562000000000'

执行结果:

验证数据是否写入成功:

当写入这条数据点的时候,你必须明确存在一个数据库名为mydb的数据库。想要获取更多参数的完整信息。

POST的请求体我们称之为行协议(Line Protocol),包含了你希望存储的时间序列数据。它的组成部分有measurement,tags,fields和timestamp。

measurement是InfluxDB必须的,你可以理解为表名。

严格地说,tags是可选的,但是对于大部分数据都会包含tags用来区分数据的来源,让查询变得容易和高效。tag的key和value都必须是字符串。

fields的key也是必须的,而且是字符串,默认情况下field的value是float类型的。

timestamp在这个请求行的最后,是一个从1/1/1970 UTC开始到现在的一个纳秒级的Unix time,它是可选的,如果不传,InfluxDB会使用服务器的本地的纳米级的timestamp来作为数据的时间戳,注意无论哪种方式,在InfluxDB中的timestamp只能是UTC时间。

同时写入多个数据

要想同时发送多个数据点到多个series(在InfluxDB中measurement加tags组成了一个series),可以用新的行来分开这些数据点。这种批量发送的方式可以获得更高的性能。

下面的例子就是写了三个数据点到mydb数据库中。 - 第一个点所属series的measurement为cpu_load_short,tag是host=server02,timestamp是server本地的时间戳; - 第二个点同样是measurement为cpu_load_short,但是tag为host=server02,region=us-west,且有明确timestamp为1422568543702900257的series; - 第三个数据点和第二个的timestamp是一样的,但是series不一样,其measurement为cpu_load_short,tag为direction=in,host=server01,region=us-west。

curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'cpu_load_short,host=server02 value=0.67

cpu_load_short,host=server02,region=us-west value=0.55 1422568543702900257

cpu_load_short,direction=in,host=server01,region=us-west value=2.0 1422568543702900257'

执行后表中的数据如下:

写入文件中的数据

可以通过curl的@filename来写入文件中的数据,且这个文件里的数据的格式需要满足InfluxDB的行语法。

给一个正确的文件(cpu_data.txt)的例子:

cpu_load_short,host=server02 value=1.67

cpu_load_short,host=server02,region=us-west value=1.55 1422568543702900257

cpu_load_short,direction=in,host=server01,region=us-west value=12.0 1422568543702900257

看我们如何把cpu_data.txt里的数据写入mydb数据库:

curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary @cpu_data.txt

说明:如果你的数据文件的数据点大于5000时,你必须把他们拆分到多个文件再写入InfluxDB。因为默认的HTTP的timeout的值为5秒,虽然5秒之后,InfluxDB仍然会试图把这批数据写进去,但是会有数据丢失的风险。

上面的rest请求执行的结果:

注意查询出的数据是按照时间排序的,不是按照插入的顺序排列的。

无模式设计

InfluxDB是一个无模式(schemaless)的数据库,你可以在任意时间添加measurement,tags和fields。

注意:如果你试图写入一个和之前的类型不一样的数据(例如,filed字段之前接收的是数字类型,现在写了个字符串进去),那么InfluxDB会拒绝这个数据。这也差不多是Influxdb对数据类型较少的限制之一了,建议你一定要记住。

对于REST的一个说明

InfluxDB使用HTTP作为方便和广泛支持的数据传输协议。

现代web的APIs都基于REST的设计,因为这样解决了一个共同的需求。因为随着终端数量的增长,组织系统的需求变得越来越迫切。REST是为了组织大量终端的一个业内认可的标准。这种一致性对于开发者和API的消费者都是一件好事:所有的参与者都知道期望的是什么。

REST的确是很方便的,而InfluxDB也只提供了三个API,这使得InfluxQL在翻译为HTTP请求的时候很简单便捷。

Rest请求返回值介绍及常见错误

Rest调用的时候,会返回http状态码,这些状态码,代表着influxdb的一些状态,如下:

2xx:如果你写了数据后收到HTTP 204 No Content,说明写入成功了!

4xx:表示InfluxDB不知道你发的是什么鬼,可能是你的http请求哪里出错了,请检查一些http的参数。

5xx:系统过载或是influxdb崩溃,暂时不可用。

举几个返回错误的例子:

两次写入值类型不一样

还是在mydb中写入数据,第一次booleanonly接收的是布尔值,第二次booleanonly是一个浮点值,两次值不一样

curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'table1 booleanonly=true'

curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'table1 booleanonly=5'

这时系统返回:

HTTP/1.1 400 Bad Request

Content-Type: application/json

Request-Id: [...]

X-Influxdb-Version: 1.2.x

Date: Wed, 01 Mar 2017 19:38:01 GMT

Content-Length: 150

{"error":"field type conflict: input field \"booleanonly\" on measurement \"tobeornottobe\" is type float, already exists as type boolean dropped=1"}

注意,第一条语句是插入成功的,第二条错误。上面返回了400错误码,也返回了一段json,json中说得很清楚,类型冲突,

写入数据到一个不存在的数据库中:

curl -i -XPOST 'http://localhost:8086/write?db=atlantis' --data-binary 'liters value=10'

返回值:

HTTP/1.1 404 Not Found

Content-Type: application/json

Request-Id: [...]

X-Influxdb-Version: 1.2.x

Date: Wed, 01 Mar 2017 19:38:35 GMT

Content-Length: 45

{"error":"database not found: \"atlantis\""}

下一步

现在你已经知道了,如何通过HTTP API写入数据了,下面我们来看看怎么通过读数据来读出它们。

influxdb 插入数据_influxdb写入数据相关推荐

  1. es 删除数据_es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊?...

    面试题 es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊?底层的 lucene 介绍一下呗?倒排索引了解吗? 面试官心理分析 问这个,其实面试官就是要看看你了解不了解 es 的一些基 ...

  2. 用户文件夹安全权限设置只能复制即上传不能删除和修改名称和修改数据或写入数据等

    实现目的:服务器共享文件夹只能上传文件不能删除或修改文件和文件名称的方法 1.右击文件夹-共享此文件夹-点击权限-添加需要查看和控制的用户组或everyone完全控制 然后点安全设置用户权限(即相当于 ...

  3. SpringBoot连接mysql数据,写入数据

    (1)先准备好mysql数据,作为springboot的数据存储服务器. 安装和启动mysql服务器的介绍:https://zhangphil.blog.csdn.net/article/detail ...

  4. influxdb 插入数据_Influx Sql系列教程五:insert 添加数据

    接下来开始进入influxdb的curd篇,首先我们看一下如何添加数据,也就是insert的使用姿势 在进入本篇之前,对于不了解什么是retention policy, tag, field的同学,有 ...

  5. 写入位置 0x00000004 时发生访问冲突_HDFS读取和写入数据简介

    HDFS 的文件访问机制为流式访问机制,即通过 API 打开文件的某个数据块之后,可以顺序读取或者写入某个文件.由于 HDFS 中存在多个角色,且对应的应用场景主要为一次写入.多次读取的场景,因此其读 ...

  6. 计算机ROM的数据可以写入吗,计算机ROM存贮器中的内容只能读出,不能写入。()

    相关题目与解析 计算机存储器中的ROM()A.只能读出数据不能写入数据B.只能写入数据不能读出数据C.不能写入数据 关于计算机内存储器的描述,下列说法中不正确的有().A.ROM中的数据在使用时只能写 ...

  7. python读数据-用 Python 的输入输出功能读取和写入数据

    读取.写入和 Python 在 "探索 Python 系列" 以前的文章中,学习了基本的 Python 数据类型和一些容器数据类型,例如 tuple . string 和 list ...

  8. android 追加写入数据到文件

    今天,简单讲讲android如何以追加的形式写入数据到文件里. 这个其实也比较简单,不过之前一直没有使用,所以昨天查询了资料,这里记录一下. import java.io.BufferedWriter ...

  9. 关于压缩工具 7z(7-zip) 的选项 -so(从标准输出流写入数据)的解读

    文章目录 一.选项介绍 二.选项示例 (一)解压缩 archive.gz 输出流并将该输出流写入到 Doc.txt 文件 (二)压缩 Doc.txt 输出流并将该输出流写入到 archive.gz 压 ...

  10. 汽车UDS诊断之通过标识符写入数据服务(0x2E)深度剖析

    WriteDataByIdentifier就是通过标识符写入数据服务,这里的标识符(ID)指的是数据标识符,也就是我们经常说的DID. 目录 1.英文术语 2.缩写表 3.服务描述 4.请求消息定义 ...

最新文章

  1. __block的初步用法
  2. Flask 教程 第十六章:全文搜索
  3. Struts2框架学习之七:避免表单重复提交
  4. mqtt调试助手_物联网入门,如何使用MQTT协议,连接Tlink物联网平台
  5. 字符数组、字节数组、字符串转换
  6. 10分钟就能学会的.NET Core配置
  7. python本地库_Python学习第71课-本地建立repository仓库
  8. 前端学习(1775):前端调试之session storage原理和查看
  9. 一个立即关闭显示器的小软件(Masm开发,只有3KB大小)
  10. 大整数乘法c语言数组,很大的数相乘怎么办?
  11. QT 线程池 + TCP 小试(一)线程池的简单实现
  12. (XGBoost)提升树入门介绍(Inrtoduction to Boosted Trees)
  13. ids for this class must be manually assigned before calling save():Xxx
  14. CheckBoxPreference组件
  15. Redis(九)-Redis的常用数据类型之Hash表
  16. 宏观经济学通识课-读书笔记
  17. warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
  18. 求若当标准型的变换矩阵
  19. shell 脚本切换用户执行当前脚本命令
  20. 有关于反走样的理解(学习笔记仅供参考)

热门文章

  1. html如何制作扑克,用css制作扑克牌
  2. 温一壶月光下的酒——林清玄
  3. 2D卷积和3D卷积的区别及pytorch实现
  4. 计算机管理系统功能模块,设备管理系统功能模块
  5. 语法高亮自定义颜色主题配置(Code::Blocks)
  6. Unity3D 场景切换
  7. 《王者荣耀》手游产品分析报告:崛起的王者荣耀,胜负就是这么简单!
  8. SpringBoot版本GA,SNAPSHOT,PRE的的含义
  9. Fractions to Decimals_usaco2.4.5_暴力
  10. 【CodeForces 767C】Garland (树形DP)