TimescaleDB 开源时序数据库

文章目录

      • 1.TimescaleDB介绍
      • 2.Hypertable 和 chunk
      • 3.Hypertable
      • 4.Hypertable操作

  • 开源中间件
# TimescaleDBhttps://iothub.org.cn/docs/middleware/
https://iothub.org.cn/docs/middleware/timescale/timescale-summary/

1.TimescaleDB介绍

TimescaleDB是基于PostgreSQL数据库打造的一款时序数据库,插件化的形式,随着PostgreSQL的版本升级而升级。

TimescaleDB具备以下特点

  1. 基于时序优化
  2. 自动分片(按时间、空间自动分片(chunk))
  3. 全SQL接口
  4. 支持垂直于横向扩展
  5. 支持时间维度、空间维度自动分区。空间维度指属性字段(例如传感器ID,用户ID等)
  6. 支持多个SERVER,多个CHUNK的并行查询。分区在TimescaleDB中被称为chunk
  7. 自动调整CHUNK的大小
  8. 内部写优化(批量提交、内存索引、事务支持、数据倒灌)
    内存索引,因为chunk size比较适中,所以索引基本上都不会被交换出去,写性能比较好
    数据倒灌,因为有些传感器的数据可能写入延迟,导致需要写以前的chunk,timescaleDB允许这样的事情发生(可配置)
  9. 复杂查询优化(根据查询条件自动选择chunk,最近值获取优化(最小化的扫描,类似递归收敛),limit子句pushdown到不同的server,chunks,并行的聚合操作)
    《时序数据合并场景加速分析和实现 - 复合索引,窗口分组查询加速,变态递归加速》
  10. 利用已有的PostgreSQL特性(支持GIS,JOIN等),方便的管理(流复制、PITR)
  11. 支持自动的按时间保留策略(自动删除过旧数据)
# 官网地址
https://www.timescale.com/# 文档
https://docs.timescale.com/latest/main# 安装
https://docs.timescale.com/latest/getting-started/installation/rhel-centos/installation-yum # github
https://github.com/timescale/timescaledb # docker
https://hub.docker.com/r/timescale/timescaledb

2.Hypertable 和 chunk

TimescaleDB作为PostgreSQL的扩展实现,这意味着Timescale数据库在整个PostgreSQL实例中运行。 该扩展模型允许数据库利用PostgreSQL的许多属性,如可靠性,安全性以及与各种第三方工具的连接性。 同时,TimescaleDB通过在PostgreSQL的查询规划器,数据模型和执行引擎中添加钩子,充分利用扩展可用的高度自定义。
从用户的角度来看,TimescaleDB公开了一些看起来像单数表的称为hypertable的表,它们实际上是一个抽象或许多单独表的虚拟视图,这些表包含称为块的数据。

通过将hypertable的数据划分为一个或多个维度来创建块:所有可编程元素按时间间隔进行分区,并且可以通过诸如设备ID,位置,用户ID等的关键字进行分区。我们有时将此称为分区 横跨“时间和空间”。

  • Hypertable

与数据交互的主要点是一个可以抽象化的跨越所有空间和时间间隔的单个连续表,从而可以通过标准SQL查询它。
实际上,所有与TimescaleDB的用户交互都是使用可调整的。 创建表格和索引,修改表格,插入数据,选择数据等都可以(也应该)在hypertable上执行。

在TimescaleDB中创建一个超表需要两个简单的SQL命令:创建表(使用标准SQL语法),然后选择CLEATEYHYTABLE()。

  • chunk

在内部,TimescaleDB自动将每个可分区块分割成块,每个块对应于特定的时间间隔和分区键空间的一个区域(使用散列)。 这些分区是不相交的(非重叠的),这有助于查询计划人员最小化它必须接触以解决查询的组块集合。
每个块都使用标准数据库表来实现。 (在PostgreSQL内部,这个块实际上是一个“父”可变的“子表”。)
块是正确的大小,确保表的索引的所有B树可以在插入期间驻留在内存中。 这可以避免在修改这些树中的任意位置时发生颠簸。

SELECT show_chunks('conditions');
SELECT show_chunks('conditions', older_than => INTERVAL '3 months');
SELECT show_chunks('conditions', older_than => DATE '2017-01-01');

3.Hypertable

create_hypertableSELECT * FROM create_hypertable(...) # 创建超表
SELECT create_hypertable('conditions', 'time');# 将表条件转换为超表,将chunk_time_interval设置为24小时。 
SELECT create_hypertable('conditions', 'time', chunk_time_interval => 86400000000);
SELECT create_hypertable('conditions', 'time', chunk_time_interval => INTERVAL '1 day');chunk_time_interval 
Interval in event time that each chunk covers. Must be > 0. As of TimescaleDB v0.11.0, default is 7 days. For previous versions, default is 1 month.  # 使用时间分区和位置分区(4个分区)将表条件转换为超表: 
SELECT create_hypertable('conditions', 'time', 'location', 4); 

在这里插入图片描述

  • create_hypertable()
    在这里插入图片描述

  • add_dimension()
    在这里插入图片描述

4.Hypertable操作

1. 创建时序表(hypertable)
# Create a schema for a new hypertable  
CREATE TABLE sensor_data (  
"time" timestamp with time zone NOT NULL,  
device_id TEXT NOT NULL,  
location TEXT NULL,  
temperature NUMERIC NULL,  
humidity NUMERIC NULL,  
pm25 NUMERIC  
);  # Create a hypertable from this data  
SELECT create_hypertable  
('sensor_data', 'time', 'device_id', 16);  2. 迁移数据到hyper table
# Migrate data from existing Postgres table into  
# a TimescaleDB hypertable  
INSERT INTO sensor_data (SELECT * FROM old_data);  3. 查询hyper table
# Query hypertable like any SQL table  
SELECT device_id, AVG(temperature) from sensor_data  
WHERE temperature IS NOT NULL AND humidity > 0.5  
AND time > now() - interval '7 day'  
GROUP BY device_id;  4. 查询最近异常的数据
# Metrics about resource-constrained devices  
SELECT time, cpu, freemem, battery FROM devops  
WHERE device_id='foo'  
AND cpu > 0.7 AND freemem < 0.2  
ORDER BY time DESC  
LIMIT 100;  5. 计算最近7天,每小时的异常次数
# Calculate total errors by latest firmware versions  
# per hour over the last 7 days  
SELECT date_trunc('hour', time) as hour, firmware,  
COUNT(error_msg) as errno FROM data  
WHERE firmware > 50  
AND time > now() - interval '7 day'  
GROUP BY hour, firmware  
ORDER BY hour DESC, errno DESC;  6. 计算巴士的每小时平均速度
# Find average bus speed in last hour  
# for each NYC borough  
SELECT loc.region, AVG(bus.speed) FROM bus  
INNER JOIN loc ON (bus.bus_id = loc.bus_id)  
WHERE loc.city = 'nyc'  
AND bus.time > now() - interval '1 hour'  
GROUP BY loc.region;  7. 展示最近12小时,每小时的平均值
=#  SELECT date_trunc('hour', time) AS hour, AVG(weight)  FROM logs  WHERE device_type = 'pressure-sensor' AND customer_id = 440  AND time > now() - interval '12 hours'  GROUP BY hour;  hour               | AVG(weight)  
--------------------+--------------  2017-01-04 12:00   | 170.0  2017-01-04 13:00   | 174.2  2017-01-04 14:00   | 174.0  2017-01-04 15:00   | 178.6  2017-01-04 16:00   | 173.0  2017-01-04 17:00   | 169.9  2017-01-04 18:00   | 168.1  2017-01-04 19:00   | 170.2  2017-01-04 20:00   | 167.4  2017-01-04 21:00   | 168.6  8. 监控每分钟过载的设备数量
=#  SELECT date_trunc('minute', time) AS minute, COUNT(device_id)  FROM logs  WHERE cpu_level > 0.9 AND free_mem < 1024  AND time > now() - interval '24 hours'  GROUP BY minute  ORDER BY COUNT(device_id) DESC LIMIT 25;  minute             | heavy_load_devices  
--------------------+---------------------  2017-01-04 14:59   | 1653  2017-01-04 15:01   | 1650  2017-01-04 15:00   | 1605  2017-01-04 15:02   | 1594  2017-01-04 15:03   | 1594  2017-01-04 15:04   | 1561  2017-01-04 15:06   | 1499  2017-01-04 15:05   | 1460  2017-01-04 15:08   | 1459  9. 最近7天,按固件版本,输出每个固件版本的报错次数
=#  SELECT firmware_version, SUM(error_count) FROM logs  WHERE time > now() - interval '7 days'  GROUP BY firmware_version  ORDER BY SUM(error_count) DESC LIMIT 10;  firmware_version  | SUM(error_count)  
-------------------+-------------------  1.0.10            | 191  1.1.0             | 180  1.1.1             | 179  1.0.8             | 164  1.1.3             | 161  1.1.2             | 152  1.2.1             | 144  1.2.0             | 137  1.0.7             | 130  1.0.5             | 112  1.2.2             | 110  10. 某个范围,每小时,温度高于90度的设备数量。
=#  SELECT date_trunc('hour', time) AS hour, COUNT(logs.device_id)  FROM logs  JOIN devices ON logs.device_id = devices.id  WHERE logs.temperature > 90 AND devices.location = 'SITE-1'  GROUP BY hour;  hour               | COUNT(logs.device_id)  
--------------------+------------------------  2017-01-04 12:00   | 994  2017-01-04 13:00   | 905  2017-01-04 14:00   | 875  2017-01-04 15:00   | 910  2017-01-04 16:00   | 905  2017-01-04 17:00   | 840  2017-01-04 18:00   | 801  2017-01-04 19:00   | 813  2017-01-04 20:00   | 798  
  • 开源中间件
# TimescaleDBhttps://iothub.org.cn/docs/middleware/
https://iothub.org.cn/docs/middleware/timescale/timescale-summary/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/736452.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Excel生成 chart 混合图表

在开发中有这样一个需求&#xff0c;邮件预警的时候&#xff0c;要求邮件主体内容是一个Chart 图表&#xff08;生成后的img&#xff09;&#xff0c;邮件需要有附件&#xff0c;且附件是Excel列表加图表&#xff0c;图表类型是混合图。 回顾&#xff1a;在之前一篇讲到如何使用…

SQL 多表查询

文章目录 多表查询的分类等值连接非等值连接自连接非自连接内连接外连接左外连接右外连接满外连接 SQL连接 JOINSQL99 语法新特性 自然连接 NATURAL JOIN & USING 多表查询的分类 等值连接 VS 非等值连接自连接 VS 非自连接内连接 VS 外连接 等值连接 关联的表有连接字段…

【c语言 】 函数入门

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;C语言 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进步&…

MySQl基础入门⑦

上一章知识内容 分析数据且区分数据类型 看下表分析数据的特征&#xff0c;根据其特征确定相应的数据类型。 分析以上表格特征&#xff0c;确定数据类型&#xff0c;并对数据进行分类。分析数据后按固定长度字符串、可变长度字符串、整数、固定精度小数和日期时间数据类型对数…

spring-data-elasticsearch官方文档解读(部分)

Spring Data Elasticsearch 这里主要学习的是4.4.16版本的文档 1. 版本 下表显示了 Spring Data 发行版系列使用的 Elasticsearch 版本和其中包含的 Spring Data Elasticsearch 版本&#xff0c;以及引用该特定 Spring Data 发行版系列的 Spring Boot 版本。给出的 Elastics…

keepalived原理以及lvs、nginx跟keeplived的运用

keepalived基础 keepalived的原理是根据vrrp协议&#xff08;主备模式&#xff09;去设定的 vrrp技术相关原理 状态机&#xff1b; 优先级0~255 心跳线1秒 vrrp工作模式 双主双备模式 VRRP负载分担过程 vrrp安全认证&#xff1a;使用共享密匙 keepalived工具介绍 keepal…

Qt 绘制中的视口(setViewport)和窗口(setWindow)

重点 &#xff1a; 1.绘制&#xff08;QPainter&#xff09;可以设置视口&#xff0c;视口下设置窗口&#xff0c;而绘制的构件是以窗口为坐标系进行绘画。 2.先根据绘图设备的物理坐标系的矩形位置&#xff0c;设置视图视口setViewport&#xff0c;然后在以视口为区域去设置…

Web题记

[CISCN 2019华北Day2]Web1 告诉我们想要的东西在flag表和flag字段&#xff0c;那应该是sql注入&#xff0c;先试试 试了一些发现会被检查到&#xff0c;随便传数字 除了1和2有返回结果&#xff0c;其余的都报错&#xff0c;应该是数字型注入&#xff0c;抓包看看过滤了哪些 这个…

在DeepLn环境中安装VLLM与ChatGLM3

DeepLn | 智慧算力触手可及是一个挺便宜的算力租用平台&#xff0c;里面有大量的显卡可以租用。唯一美中不足的是&#xff0c;提供的pytorch版本低&#xff0c;只支持到2.01&#xff0c;为了匹配vllm&#xff0c;需要手动安装指定版本的pytorch。 vllm介绍 总体而言&#xff0…

如何关闭vscode灰色代码提示

vscode编辑rust代码时&#xff0c;rust-analyze插件会默认给代码添加一些提示&#xff08;灰色代码&#xff09;&#xff0c;这部分代码 不会保存到文件&#xff0c;仅仅是为了你方便看各种变量的定义等。 但有时会觉得代码很乱&#xff0c;所以按以下方法可以把他隐藏。 1&am…

接收端编程、UDP编程练习、wireshrak抓包工具、UDP包头

我要成为嵌入式高手之3月6日Linux高编第十六天&#xff01;&#xff01; ———————————————————————————— 学习笔记 接收端 recvfrom #include <sys/types.h> #include <sys/socket.h> ssize_t recvfrom(int sockfd, void *buf, si…

【50天50个项目】旋转导航页面

实现效果&#xff1a; HTML <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><link rel"stylesheet&…

asp飞机订票-57-(说明+代码)

演示查看 http://pc.3q2008.Com/3q2008_Com/hkdp 目 录 1&#xff0e; 系统规划 3 1&#xff0e;1 行业背景 3 1&#xff0e;2 行业现状 3 1.2.1用户注册 3 1.2.2航班查询 3 1.2.3在线订票 3 1.2.4在线支付 3 1.2.5电子客票 4 1.2.6其它辅助产品与服务 4 1&#xff0e;3 需求…

[Mac软件]Adobe Illustrator 2024 28.3 intel/M1/M2/M3矢量图制作软件

应用介绍 Adobe Illustrator 是行业标准的矢量图形应用程序&#xff0c;可以为印刷、网络、视频和移动设备创建logos、图标、绘图、排版和插图。数以百万计的设计师和艺术家使用Illustrator CC创作&#xff0c;从网页图标和产品包装到书籍插图和广告牌。 绘制任意大小的标志 拥…

Timus#1005

C【动态规划】 #include<iostream> #include<vector> using namespace std; int main() {int n;cin >> n;vector<int> dp(100000 * 20);vector<int> a(n);int ans 0, cur 0;for (int i 0; i < n; i){cin >> a[i];ans a[i];}int sum…

探索直播美颜SDK背后的深度学习算法:智能化美肤与特效实现

美颜SDK背后的技术原理和深度学习算法近期很多读者向小编提问。今天&#xff0c;我将为大家深入讲解直播美颜SDK背后的深度学习算法&#xff0c;以及智能化美肤与特效实现的原理与应用。 一、美颜SDK的背后&#xff1a;深度学习算法 美颜SDK是一种集成了多种美颜功能的软件开…

【APB协议 UVM_Sequencer Driver Monitor_2024.03.04】

apb协议 写时序 地址、写信号、PSEL、写数据信号同时发生变化&#xff0c;即传输的第一个时钟被称为SETUP周期。在下个时钟上升沿,PENABLE信号拉高&#xff0c;表示ENABLE周期&#xff0c;在该周期内&#xff0c;数据、地址以及控制信号都必须保持有效。整个写传输在这个周期…

分享几个Google Chrome谷歌浏览器历史版本下载网站

使用selenium模块的时候&#xff0c;从官网下载的谷歌浏览器版本太高&#xff0c;驱动不支持&#xff0c;所以需要使用历史的谷歌浏览器版本 &#xff0c;这里备份一下以防找不到了。 驱动下载地址&#xff1a;https://registry.npmmirror.com/binary.html?pathchromedriver 文…

WiFi贴码推广能赚钱吗?掌握WiFi贴码推广技巧

“WiFi贴码推广能赚钱吗”是当前很多创业者关注的一个话题&#xff0c;WiFi贴码推广这一新兴的商业模式&#xff0c;是指商家在其门店或者特定场所提供免费WiFi&#xff0c;不需要输入密码wifi二维码即可连接&#xff0c;连接后合作商就会获得一定的收益。这种模式既方便了用户…

白酒:陈酿过程中的理化变化与香味成分的转化

在豪迈白酒的陈酿过程中&#xff0c;理化变化和香味成分的转化是形成与众不同风味和品质的重要环节。云仓酒庄深入了解和掌握陈酿过程中的理化变化规律&#xff0c;以及香味成分的转化机制&#xff0c;通过科学的方法和精细的管理&#xff0c;提升豪迈白酒的品质和口感。 首先&…