Python工具箱系列(三十三)

这篇具有很好参考价值的文章主要介绍了Python工具箱系列(三十三)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Timescaledb

在物联网时代,出现了大量以时间为中心海量产生的传感器数据,称为时序数据。这类数据的特点是:

  • 数据记录总有一个时间戳。

  • 数据几乎总是追加,不更新也不删除。

  • 大量使用近期的数据。很少更新或者回填时间间隔的缺失数据。

  • 与时间间隔频率关系不大。但累积的数据量大,可能会有峰值。

  • 对这类数据有多种聚合查询的需求,并且越快越好。例如,截止到目前为止,最大值/最小值/平均值是多少,数据流速是多少等。

为此,IT界兴起了时序数据库。TimeScaleDB是其中的佼佼者,截止到2022年7月,它的排名在第5名,值得使用。由于TimeScaleDB是postgresql的一个插件,因此非常便于安装与使用。同时,它也是一个开源的时间序列数据库,为快速获取和复杂查询进行了优化。此外,它也是多模型设计,在体现与时序数据相关的特性外,它执行的是“完整的SQL”,程序员很容易使用与管理它。

它的安装不复杂。使用以下命令在ubuntu bionic下安装单机版本。

apt install -y gnupg postgresql-common apt-transport-https lsb-release wget
/usr/share/postgresql-common/pgdg/apt.postgresql.org.sh
echo "deb https://packagecloud.io/timescale/timescaledb/ubuntu/ $(lsb_release -c -s) main" > /etc/apt/sources.list.d/timescaledb.list
wget --quiet -O - https://packagecloud.io/timescale/timescaledb/gpgkey | apt-key add -
apt update
apt install -y timescaledb-2-postgresql-14
# 做一个调整
timescaledb-tune --quiet --yes
# 重新启动数据库服务
systemctl restart postgresql

# 以postgres用户启动命令行
su postgres -c psql

# 在psql命令行环境中。输入以下命令,从而关联到timescaledb这个扩展上。
CREATE database sensordb;
\c sensordb
CREATE EXTENSION IF NOT EXISTS timescaledb;
\q

# 再次连接
su postgres -c 'psql -d sensordb'
# 显示扩展列表(extensions)
\dx

一、创建时序相关得表

在sensordb下创建测试用的表,这个创建的过程有些特殊。相关命令如下:

 文章来源地址https://www.toymoban.com/news/detail-459689.html

# 传感器表,传统的表
CREATE TABLE sensors(
  id SERIAL PRIMARY KEY,
  type VARCHAR(50),
  location VARCHAR(50)
);

# 传感器数据库,这个将转换成为超表
CREATE TABLE sensor_data (
  time TIMESTAMP NOT NULL,
  sensor_id INTEGER,
  pm25 DOUBLE PRECISION,
  temperature DOUBLE PRECISION,
  FOREIGN KEY (sensor_id) REFERENCES sensors (id)
);

# CREATE EXTENSION IF NOT EXISTS timescaledb;

# 转换为超表
SELECT create_hypertable('sensor_data', 'time');

# 生成4个传感器
INSERT INTO sensors (type, location) VALUES
('a','地板'),
('a', '天花板'),
('b','地板'),
('b', '天花板');

# 测试一下。
select * from sensors;

 

接下来,使用python连接时序数据库,并且模拟相关的数据插入到表中。

二、使用Python模拟数据

 

import psycopg2
import random
import datetime

# 事先创建后数据库demodb
demodb = psycopg2.connect(database="sensordb", user="postgres",
                          password="88488848", host="172.17.2.151", port="5432")

democur = demodb.cursor()

currenttime = datetime.datetime.now()

# 插入模拟出来的数据。
for _ in range(100000):
    currenttime = currenttime+datetime.timedelta(seconds=1)
    for id in range(1,5,1):
        pm25 = random.uniform(0, 300)
        temp = random.uniform(0, 40)
        insertsql = f'''insert into sensor_data(sensor_id,pm25,temperature,time) values({id},{pm25},{temp},'{currenttime}')'''
        democur.execute(insertsql)
    demodb.commit()

democur.close()
demodb.close()

 

这里插入10万秒的数据,相当于100000/86400=1.15(天)的数据。在插入数据的同时,就可以同时在数据库中进行按30分钟的分桶查询,这是时序数据库的一个特殊功能。

# su postgres -c 'psql -d sensordb'

SELECT
  time_bucket('30 minutes', time) AS period,
  AVG(temperature) AS avg_temp,
  last(temperature, time) AS last_temp,
  AVG(pm25) AS avg_pm25
FROM sensor_data
GROUP BY period;

SELECT
  time_bucket('60 minutes', time) AS period,
  AVG(temperature) AS avg_temp,
  last(temperature, time) AS last_temp,
  AVG(pm25) AS avg_pm25
FROM sensor_data
GROUP BY period;

此时,按30分钟时间窗口聚会的数据查询效果如下图所示:

Python工具箱系列(三十三)

可以看出,TimeScaleDB已经将数据按30分钟来聚合分析。当然,改成任意时间也是可以的,例如,可以改成5秒分析一次也可以,生成结果的时间也非常快。

 

到了这里,关于Python工具箱系列(三十三)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python工具箱系列(三十一)

    Neo4j是一个高性能的开源的,使用Java语言实现的NoSQL图数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。Neo4j也可以被看作是一个

    2024年02月03日
    浏览(50)
  • Python工具箱系列(三十六)

    基于Docker的数据库开发环境 前文介绍了sqlite/mysql/mssql等数据库系统在ubuntu的安装与部署过程,相对是比较复杂的,需要耐心等待下载以及排除各种故障,对于开发人员来说是不太友好。在某些情况下,开发人员要测试在多个数据库环境下软件的正确性,需要部署多个数据库,

    2024年02月09日
    浏览(50)
  • Python工具箱系列(三十四)

    SQLAlchemy是著名的ORM(Object Relational Mapping-对象关系映射)框架。其主要作用是在编程中,把面向对象的概念跟数据库中表的概念对应起来。对许多语言(例如JAVA/PYTHON)来说就是定义一个对象,并且这个对象对应着一张数据库的表。而这个对象的实例,就对应着表中的一条记录。

    2024年02月06日
    浏览(52)
  • Python工具箱系列(四十一)

           前文的代码示例了使用gzip对单个文件进行压缩。本文示例使用更通用的zipfile来批量压缩文件。zipfile也是python内置的库,使用起来非常方便。废话不说,直接上代码示例。        上述示例代码中,再次引入一个python内置的轻量级数据库dbm。与shelve类似,也是key-val

    2024年02月11日
    浏览(53)
  • IDEA插件系列(4):GitToolBox插件——git工具箱

    GitToolBox 提供各种git操作。 第一种安装方式是使用IDEA下载安装 第二种安装方式是使用离线插件进行安装 插件下载地址:http://plugins.jetbrains.com/plugin/7499-gittoolbox 在这里进行配置 更多可参考文档 https://github.com/zielu/GitToolBox/wiki/Manual 作用:显示当前代码提交的用户名、时间、以

    2024年02月11日
    浏览(42)
  • HNU-离散数学-工具箱系列3-关系矩阵法求传递闭包

    用于解决这类问题: 举例一、  举例二、(求传递闭包)   代码如下:

    2024年02月11日
    浏览(50)
  • python实现视频抽帧,文件批量操作,文件批量处理(数据集制作的工具箱)

    环境准备 数据集制作 文件批量重命名 文件批量移动 将文件批量按照一定格式进行重命名 修改xml文件内容的方法 Pathlib库的常用接口 在计算机视觉项目中,文件批量操作和文件批量预处理是必不可少的步骤。它们涉及处理大量的图像文件,包括读取、处理、保存和预处理。

    2024年02月09日
    浏览(72)
  • PDF 工具箱

    PDF 工具箱 V9.0.0.1 程序:VB.net  运行库: NET Framework 4.5 下载:https://download.csdn.net/download/polloo2012/88399029 功能简介: 1、PDF文件多文件合并,可调整顺序。 2、PDF文件拆分,将每页拆分成独立的PDF文件。 3、PDF文件添加水印,文字或图片水印,图片水印可选择位置。 4、word/exce

    2024年02月09日
    浏览(48)
  • Matlab 优化工具箱

    语法:[x,fval,exitflag,output,lambda] = linprog(f,A,b,Aeq,beq,lb,ub,options) f、x、b、beq、lb 和 ub 是向量,A 和 Aeq 是矩阵。 示例1-1 : 语法:[x,fval,exitflag,output] = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub,x0,options) f、x、intcon、b、beq、lb 和 ub 是向量,A 和 Aeq 是矩阵。 语法:x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub

    2024年02月02日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包