伪列应用 - 数据转存和下推

简介:

标签

PostgreSQL , FDW , 伪列 , function pushdown , DS , 时序数据


背景

金融、气象、物联网、互联网等行业,有特别多的时序数据,例如股票的交易数据,气象传感器的采集数据,车联网的轨迹数据,互联网的FEED数据,都具有非常强的时序属性。

时序数据如何有效的存储、方便的使用呢?

例如这样的写入

create table xx (xxx) ts interval day;  
  
insert into table values (x,x,x,x) ;   

数据可以根据到达时间,自动写入对应时间存储分片中。

而这样的查询,会自动从对应的存储分片中获取数据。

select * from table where ts between ? and ?;  

这样的功能是很好实现的,例如使用分区表,每个分区对应一个时间片。

PostgreSQL的timescale插件,就可以方便的实现时序数据存取的功能。

但是本文讲的是另一种时序实现方法,当我们不想把数据存在本地,而是想存到外部时(例如对象存储),PG提供了一个FDW的接口,阿里云RDS PG提供了一种OSs_fdw允许用户将数据写入OSS对象存储,而不落数据库。

有没有一种简单的方法可以将时序数据写入外部,并且查询时还能从中获取对应的分片,减少数据传输呢?

使用FDW分区表是一种方法,如果INTERVAL很细的话,会造成分区表过多,分区表过多至少目前是会有一定的影响。(例如每小时一个分区,一年一章报就有365*24个分区)。

有没有更好的方法呢?

伪列

通过伪列实现是不错的,用户不需要存储一个真实的时间字段,而是将数据到达时间作为一个条件,将对应记录写入对应的存储分片。

同时可以在文件头部记录每个分片的时间区间。

伪列实际是不存在的,所以表上其实没有这列,(类似PG的ctid,xmin,xmax,cmin,cmax列) 但是查询时如何将时间传给FDW呢?

操作符, 函数 pushdown

使用操作符、函数的pushdown,可以将一些信息传给FDW,使用HOOK,可以在中途截获这部分pushdown,转换成对应的请求发给远端,从而实现伪列的用户SQL接口和远端的消息传递。

例如

select * from table where xxx and function(ts1, ts2);  

中途截获SQL,得到ts1,ts2,传递给远端。

PostgreSQL postgres_fdw插件支持的pushdown介绍如下,building function可以pushdown,extension的immutable function可以下推。

我们自己定义FDW接口,也可以借鉴。

Remote Execution Options  
  
By default, only WHERE clauses using built-in operators and functions will be considered for execution on the remote server.   
  
Clauses involving non-built-in functions are checked locally after rows are fetched.   
  
If such functions are available on the remote server and can be relied on to produce the same results as they do locally,   
performance can be improved by sending such WHERE clauses for remote execution.   
  
This behavior can be controlled using the following option:  
  
  
extensions  
  
This option is a comma-separated list of names of PostgreSQL extensions that are installed, in compatible versions, on both the local and remote servers.   
  
Functions and operators that are immutable and belong to a listed extension will be considered shippable to the remote server.   
  
This option can only be specified for foreign servers, not per-table.  
  
When using the extensions option, it is the user's responsibility that the listed extensions exist and behave identically on both the local and remote servers.   
  
Otherwise, remote queries may fail or behave unexpectedly.  
  
  
fetch_size  
  
This option specifies the number of rows postgres_fdw should get in each fetch operation.   
  
It can be specified for a foreign table or a foreign server.   
  
The option specified on a table overrides an option specified for the server.   
  
The default is 100.  

当然,这里面是存在一定的开发工作量的。

实现后,PG+外部存储 能实现非常高效的时序数据写入和检索。

pic

参考

http://www.timescale.com/

相关实践学习
对象存储OSS快速上手——如何使用ossbrowser
本实验是对象存储OSS入门级实验。通过本实验,用户可学会如何用对象OSS的插件,进行简单的数据存、查、删等操作。
目录
相关文章
|
Java C# C++
Java源码转C#源码的五款最佳工具
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/41913581 Java源码转C#源码的五款最佳工具 作者:chszs,转载需注明。
1703 0
|
6月前
|
人工智能 API 网络安全
新手零基础阿里云轻量服务器部署OpenClaw、集成iMessage简单步骤及免费大模型百炼Coding Plan API配置及避坑指南
OpenClaw(又名Clawdbot,常被称为AI小龙虾)是一款开源、轻量、可高度自定义的AI自动化网关工具,能一键集成iMessage、飞书、Slack等主流IM平台,通过对接大模型API实现智能对话、任务自动化、代码生成等核心能力。对于新手而言,**阿里云轻量应用服务器**凭借低成本、高稳定性、一键应用镜像、免复杂环境配置的特性,成为部署OpenClaw的最优选择。搭配阿里云百炼Coding Plan免费额度,无需额外付费即可搭建7×24小时稳定运行的专属AI服务,本文将从服务器选购、OpenClaw部署、iMessage集成、百炼API配置到高频问题避坑,提供全流程零基础可直接复制
824 6
|
7月前
|
人工智能 机器人 API
OpenClaw阿里云无影云电脑一键部署实战:快速搭建、飞书无缝集成与常见问题解答
OpenClaw(原Clawdbot)作为轻量化、可扩展的AI智能体框架,凭借灵活的模型接入、多渠道消息分发与自动化任务能力,成为个人与团队搭建专属AI助手的优选。2026年,阿里云无影云电脑提供OpenClaw官方预置镜像,无需手动配置复杂环境,新手可通过桌面化操作快速完成云端部署。将OpenClaw接入飞书,可让AI助手直接在企业协作、团队沟通场景中响应指令、处理任务,实现从云端部署到实际应用的闭环。
1063 11
|
9月前
|
存储 弹性计算 网络安全
阿里云新手必看:2026年云服务器购买全流程与配置选型指南
对阿里云新手来说,选云服务器不用追求高配置,核心是 “匹配需求、控制成本、简化操作”,重点关注 “选购买路径、配核心参数、搭基础环境” 这三方面。下面结合实操经验,给新手梳理清晰的选型框架,帮大家快速选到合适的服务器。
|
10月前
|
存储 SQL 关系型数据库
面试八股文专题-----MySQL篇
本篇系统讲解MySQL核心知识:查询语句的书写与执行顺序、多表连接方式、索引机制(B+树、聚簇/非聚簇、回表、覆盖索引)、SQL优化策略(左前缀原则、索引失效场景)、存储引擎对比及慢查询定位分析,助力高效数据库开发与调优。
|
11月前
|
弹性计算 网络协议 Cloud Native
阿里云DDoS原生防护2.0(包年包月)中小企业普惠版收费价格10402元一年
阿里云DDoS原生防护2.0中小企业普惠版,年费10402元,含每月2次防护,支持1个Region、IPv4/IPv6二选一,最高1Gbps带宽,适用于低风险企业,详情见官方页。
|
算法
三电平逆变器SVPWM控制(无解耦功能)与谐波分析
三电平逆变器的空间矢量脉宽调制(SVPWM)控制方法,重点分析在不使用解耦控制的情况下实现5%谐波含量的技术方案。我们将使用MATLAB/Simulink进行建模和仿真分析。
855 1
|
JavaScript 安全 前端开发
关于Node.js,一定要学这个10+万Star项目 !!
一篇关于Node.js的宝藏项目——Node.js Best Practices。该项目在GitHub上已有102k Star,汇集了100+条最佳实践,涵盖架构、安全、性能等多方面。每条实践不仅有简明说明和详细解释,还附带代码示例及资源链接。文中通过三个实战案例(利用CPU多核、避免阻塞事件循环、使用中间件处理错误)展示了其实际应用价值,并推荐了几条对前端转Node.js开发者特别有用的最佳实践。强烈建议每位Node.js开发者学习此项目,理解“怎么做”与“为什么要这么做”,以提升开发能力。
555 3
|
编解码 IDE KVM
Happy coding,明基RD280U使用分享
最近尝试了明基的专业编程显示器 `RD280U`,28寸4K分辨率,3:2屏幕比例,适合编程。支持硬件级防蓝光、抗反射面板,接口丰富,支持KVM。自动亮度调节、编码模式和软件辅助功能,使其在编程体验上表现出色。如果你对专业编程显示器有需求,这无疑是一个不错的选择。
1298 12
|
存储 缓存 前端开发
ATB算子实现原理解读
本文详细介绍了Ascend Transformer Boost(ATB)加速库中三种类型算子的执行流程及其与CANN中其他算子的区别。文章首先概述了ATB算子的实现步骤,接着深入解析了单算子和图算子的执行流程,包括kernel图构建、输入准备、内存计算、tiling数据处理及任务下发等环节。此外,还探讨了ATB在host侧性能优化上的几种机制,如Tiling Cache、Setup与InferShape复用、Runner Pool等,以及ATB中的内存优化与管理策略。最后,介绍了Context类的功能和作用,包括它如何管理ATB内部的各种公共资源。