首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一次使用InfluxDB数据库的总结

一次使用InfluxDB数据库的总结

作者头像
Johnson木木
发布2019-08-21 09:50:45
1.9K0
发布2019-08-21 09:50:45
举报
文章被收录于专栏:猿小俊猿小俊

前言

因当前的项目需要记录每秒钟服务器的状态信息,例如负载、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♪(・ω・)ノ

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-07-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • 第一次的方案
      • 第二次的方案
      • InfluxDb教程
        • 安装
          • 可视化工具InfluxDb Studio
            • 客户端
            • 结语
            相关产品与服务
            时序数据库 CTSDB
            腾讯云时序数据库(TencentDB for CTSDB)是一种高效、安全、易用的云上时序数据存储服务。特别适用于物联网、大数据和互联网监控等拥有海量时序数据的场景。您可以根据实际业务需求快速创建CTSDB 实例,并随着业务变化实时线性扩展实例。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档