前言

因当前的项目需要记录每秒钟服务器的状态信息,例如负载、cpu等等信息,这些数据都是和时间相关联的。

因为一秒钟就要存储挺多的数据。而且我还在前端做了echart的折线图,使用websocket实时查看数据的变化。

第一次的方案

第一次是很简单的,就是mysql建索引,在时间戳和其余两个条件查询比较多的字段建索引,然后最近一天的数据是存放到redis缓存当中的,

一开始感觉还是不错的,所以查询实时的数据还是挺快的,查询历史数据因为有索引的关系,所以速度也还可以。

但是随着数据量的增多,发现查询历史数据也逐渐变慢了,数据占用空间太大了,而且索引的占用空间竟然也非常的恐怖。

第二次的方案

因为考虑到第一次的解决方案处理稍微有点复杂,并且数据占用空间大。就网上搜一搜有什么解决方案,一个时序数据库的文字进入了

我的猿眼。全称叫做时间序列数据库,主要用于带时间标签的数据,例如用于实时监控、设备采集所产生的数据。哦吼?搞一下。

# InfluxDb教程
## 安装
> 官方网址:https://docs.influxdata.com/influxdb/v1.7/introduction/installation/

因为我用的是ubuntu18.04,所以下面就把ubuntu的安装教程写在这,其他的版本可以到官网上面看看。

添加InfluxData存储库:

wget -qO- https://repos.influxdata.com/influxdb.key | sudo apt-key add -
source /etc/lsb-release
echo "deb https://repos.influxdata.com/${DISTRIB_ID,,} ${DISTRIB_CODENAME} stable" | sudo tee /etc/apt/sources.list.d/influxdb.list

安装并启动InfluxDb服务

sudo apt-get update && sudo apt-get install influxdb
sudo service influxdb start

到这一步你已经可以使用InfluxDB数据库啦,端口是8086,刚安装的InfluxDB是免密登录的,

如果开启身份验证就在配置文件下把auto-enabled选项设置为true

[http]
auth-enable = true

最后使用 -config 选项将进程指向配置文件:

influxd -config /etc/influxdb/influxdb.conf

## 可视化工具InfluxDb Studio

https://github.com/CymaticLabs/InfluxDBStudio

这个工具查询数据多的时候渲染会很卡,不要以为是查询数据慢了,

我一开始就是以为查的慢。再说一遍,端口是8086。

客户端

因为我用的是php,所以就使用了influxdb的php客户端

php客户端入口:https://github.com/influxdata/influxdb-php

其它语言的客户端库可以在这里找:

https://docs.influxdata.com/influxdb/v1.7/tools/api_client_libraries/

快速上手:

composer 安装influxdb-php客户端

$ composer require influxdb/influxdb-php

直接放php代码,注释和说明在代码里面写了,比较直接。

//获取客户端对象
$client = new \InfluxDB\Client("127.0.0.1", 8086, "username", "password"); //选择数据库, 获取Database对象
$database = $client->selectDB("database_name");
$points = [
new Point("table_name", 3, //第一个参数为表名, 第二个参数为值
[
"tags" => 1, //标签值
],
[
'fields' => 1 //字段
],
time()), //最后一个为时间戳
]; //写入数据, 第一个参数为写入的数据,第二个参数为时间戳的精度,这里我们使用秒精度
$database->writePoints($points, Database::PRECISION_SECONDS);

查询方式分两种,第一种则是直接使用sql查询

$database->query("select * from table_name where time > 1563602406s", [
"epoch" => "s" //让返回的时间格式为秒精度的时间戳,
])->getPoints(); //返回的数组集合

sql是不是有点奇怪呢?因为数据保存的时候InfluxDB是按照自己的格式存储的,如果要用秒时间戳作为条件查询,就要这样写啦,

在api文档里面有说明

api文档的快捷入口:https://docs.influxdata.com/influxdb/v1.7/tools/api/

第二种则是使用Builder查询,其实就是帮你把要查询的操作封装起来,到最后解析成SQL,最后再调用方式一的query方法。

//2.使用Builder查询
$builde = $database->getQueryBuilder();
$builde->select("*") //查询字段
->from("table_name") //表名
->setTimeRange(1563602406, 1563602806) //筛选时间范围
->where(["type = 1"]) //查询条件
->getResultSet() //里面其实就是调用了方式1的$database->query方法。
->getPoints(); //返回数组集合

setTimeRange筛选时间范围这个方法需要注意,如果安装InfluxDB的机器(虚拟机)和你开发中机器的时区不同,

就不要用了,因为他提前把时间格式化为Y-m-d H:i:s,然后再拿这个时间去不同时区的机器那里查询。数据肯定不对。

好了,到这里简单入门就差不多啦。

结语

总结自己的学习过程还是蛮不错的,每一次学习到新东西,都感觉到提升了自我价值。但是如果不用记录下来的话,

总感觉少了点什么。好像过不久就会忘掉一样,所以学到新东西感觉还是记录下来比较心安,嘿嘿。

文章中若有不足之处,请各位在下面评论区留下。Thanks♪(・ω・)ノ

个人博客网址: https://colablog.cn/

如果我的文章帮助到您,可以关注我的微信公众号,第一时间分享文章给您

一次使用InfluxDB数据库的总结的更多相关文章

  1. Python 使用Python远程连接并操作InfluxDB数据库

    使用Python远程连接并操作InfluxDB数据库 by:授客 QQ:1033553122 实践环境 Python 3.4.0 CentOS 6 64位(内核版本2.6.32-642.el6.x86 ...

  2. influxdb数据库的安装部署(windows)二

    1.把下载好的文件解压到目录中 2.以管理员身份运行cmd进入influxdb-1.7.6-1文件夹 3.生成influxdb数据的默认配置Config文件 4.修改Config配置信息 5.用配置好 ...

  3. logstash将redis中的队列中数据发送到influxdb数据库中

    通过elk获取到的java jvm中ygc的时间如下: 现在讲ygc字段的值,发送到influxdb中 首先安装logstash的插件 logstash-output-influxdb 安装完成后,查 ...

  4. Nlog打印日志到Influxdb数据库

    1.安装和使用Influxdb 安装部分网上资料比较多,也讲的比较详细,请自行百度. 下面大概讲下InfluxDB的写入和读取数据的方法. 我使用了InfluxData.Net包. 工具->Nu ...

  5. Influxdb数据库 - 基本操作

    InfluxDB数据库的简介 InfluxDB是一个用于存储和分析时间序列数据的开源数据库,是一个基于 golang 编写,用于记录 metrics.events,进行数据分析. 主要特性有: 内置H ...

  6. (转)InFluxDB数据库使用手册

    InfluxDB是一个开源的时序数据库,使用GO语言开发,特别适合用于处理和分析资源监控数据这种时序相关数据.而InfluxDB自带的各种特殊函数如求标准差,随机取样数据,统计数据变化比等,使数据统计 ...

  7. Python操作Influxdb数据库

    1.influxdb基本操作[root@test ~]# wget https://dl.influxdata.com/influxdb/releases/influxdb-1.2.4.x86_64. ...

  8. 脚本采集数据插入到influxdb数据库里

    #!/bin/bash # 定时收集java服务metrics # curl http://10.7.16.42:6301/metrics demo # 参数: post_influxdb_write ...

  9. influxdb数据库增加身份认证(windows)三

    接上一节,增加数据库身份认证 1.修改Config配置文件auth-enabled为true 2.然后重新载入最新的config配置文件打开数据库 3.验证身份认证功能是否已打开 说明身份认证功能已打 ...

随机推荐

  1. Go语言v1.8正式发布,有显著的性能提升和变化(go适合服务器编程、网络编程)

    前言 Go语言现在在服务端的网络编程领域越来越火,尤其像IM即时通讯应用这种富网络应用且对服务端网络性能要求极高的场景,很高兴看到Golang发布了1.8正式版,希望在多核架构横行的时代多一些这种顺应 ...

  2. VPS用来配置上网外,还可以做一个同步盘

    我曾经在一个活动的博文里说过,男人必须要有一个VPS和一个树莓派,VPS这个东西,以后会是中国男人的一种必备技能,今天又有一个小伙伴请教我VPS的用法,我就简单说说我目前使用的情况.首先我希望你能有点 ...

  3. c#透明panel

    先看下效果 纯透明的pane,然后设置一个半透明的图片,可以看出来显示了父控件的button 看代码 public partial class PanelEx : Panel { protected ...

  4. 直播的本质(创业者应该要从商业模式的右边开始思考,你为用户创造了什么价值?找客户并不难,但要想办法让客户不离不弃;PC端功能的丰富很重要,因为手机版通常只是一个迷你版)

    我想稍微给直播这件事浇点冷水. 的确,直播现在越来越火,YouTube凭着良好的基础建设平台前段时间也做起了直播,Facebook Live最近也加入了变脸.预定直播时间和双人录制的功能,更不用说国内 ...

  5. Qt动画效果的幕后英雄:QTimeLine

    其实动画的本质就是在每一定时间间隔内显示一帧图像,当这个间隔较短的时候人眼就感觉不出来了,觉得看到的是连续的影像.Qt为开发动画效果的人员提供了一个很好的时间控制类QTimeLine. QTimeLi ...

  6. Google C++测试框架系列入门篇:第一章 介绍:为什么使用GTest?

    原始链接:Introduction: Why Google C++ Testing Framework? 词汇表 版本号:v_0.1 介绍:为什么使用GTest? GTest帮助你写更好的C++测试代 ...

  7. oh my god,写20万数据到Excel只需9秒

    还是菜鸟时,在某个.Net项目中,用户需要从业务系统导出Report,而数据量通常都在上万条以上,最初采用的方式就是在服务器端用NPOI生成Excel,把Data一行一行一个Cell一个Cell地写到 ...

  8. Ubuntu --- Virtualbox 和 宿主机文件夹共享

    1.在设置里面共享文件夹 2.在Ubuntu中配置 sudo mount -t vboxsf share /var/www/html/ 无需重启即可生效 3.实现系统重启后也自动挂载 在文件 /etc ...

  9. 【过时】项目转Maven后出现的问题记录

    上图,文字后补充 1.过程 创建一个新的web项目,项目名称与原项目名称一致.注意勾选“添加mvn支持(红框部分)”,勾选后运行目标服务器会变为none,这里无法进行添加. 2.项目创建完成后,会报错 ...

  10. Google Chrome浏览器插件入门开发

    --1. 在html文件中引用js 文件 --2.在Google Chrome中开发简单插件 1.首先,简单说明一下在html 中引用js 文件: 将kittenbook.html 和 kittenb ...