首页 > 数据库 >SQL_Postgresql-一些扩展和应用

SQL_Postgresql-一些扩展和应用

时间:2024-08-22 11:37:49浏览次数:5  
标签:Postgresql 数据源 扩展 queue duckdb PG FDW SQL pg

数据库

数据库上托应用,下连基础设施,是整个 IT 系统中,承上启下最为关键的一环

Postgresql

PG以C语言写成,
   因此其内部公开的接口(无论是FDW的回调函数接口还是供FDW使用的内部接口)都是面向C语言设计的,
时空地理分布式,时序文档超融合
   PostgreSQL把锁分为三类,
      table-level, row-level and advisory locks
	    .Table和Row级锁可以是显式或隐式锁,
         advisory locks通常是显式锁.显式锁在显式用户请求时获得,而隐式锁则通过标准SQL命令获得
	 Row-level locks,分别是:更新操作的时候,必须对该行数据加锁
	 两个是排他锁,只能被一个事务使用。
	 另外两个是共享锁,可以被多个事务同时使用
         1.FOR UPDATE	 2.FOR NO KEY UPDATE  3.FOR SHARE  4.FOR KEY SHARE

PG作为队列

一般我们都是用 Redis/RabbitMQ等等 来做MQ
  并将RabbitMQ替换为构建Postgres 数据库之上并用 SQL 编写的队列。
  为什么首先需要一个队列?

     一个 ORDER BY 子句来维护队列排序
	 通过简单的读/写行级锁保证作业不会被超过一个worker读取
1.设计存储表-来存储消息 pg_queue 
    队列名称和内容 queue_name   queue_payload
    时间-  created_at   updated_at   executed_at 
    状态-  status 取值有(pending, processing, done, failed,ack)
2.联合索引 -- add index
  create index pg_queue_queue_name_status_idx on pg_queue (queue_name, status, executed_at);

3.任务  生产-消费
 生产任务  -- add task to queue
        INSERT INTO pg_queue (queue_name, payload) VALUES ('test', '1');
 消费任务
 取消任务
 任务重试    
 清理过期任务 	 

基于FDW的Sharding方案作为PG源生的分布式实现方案

 PG的表继承 + postgres_fdw
    FDW的核心就在于使用外部表(FOREIGN TABLE)
	一个FDW实现的核心就是实现一组回调函数。有了这些回调函数的帮助,
	  在查询外部表对象的执行过程中就可以将运行逻辑切换至自定义的扩展代码中,进而遵照PG的内部机制实现对外部数据源的访问

PG 生态里向量数据库扩展

   至少六款向量数据库扩展( pgvector,pgvector.rs,pg_embedding,latern,pase,pgvectorscale)
pgvector 在以 AWS 为代表的厂商大力投入加持之下

PG 生态OLAP 生态-DuckDB扩展

有五个玩家下场赛马了,
包括 ParadeDB 的 pg_lakehouse,基于 DuckDB 打造 pg_lakehouse 扩展。
国内个人开发者李红艳编写的 duckdb_fdw,
CrunchyData 的 crunchy_bridge, 
Hydra 出品的 pg_quack;
MotherDuck 原厂也跑过来做 PG 扩展了 —— pg_duckdb

使用 DuckDB 引擎进行计算,并且可以直接从文件系统/S3 上读取 Parquet / IceBerg 格式的文件

 直接利用 PG的存储引擎接口,
 直接用外部数据源包装器(FDW)的基础设施-FDW技术的初衷是为了统一异构数据源的访问方式
     FDW(Foreign Data Wrapper),得用户可以通过SQL访问存储在PG之外的数据
	    远端数据如果本身要能够具备这些被下推的能力(JOIN、 聚合、数据更新等等)
		    助FDW已经可以实现将更多地运算(如JOIN,聚合等)下推至远端数据源,并能够对远端数据源的数据进行更新

语言和C语言

Go语言与C语言之间相对友好的交互机制(比起Java的JNI机制要友好很多)	

duckdb

  练习学习sql的新选择-用duckdb代替mysql个人最佳分析数据库
   01.duckdb和依赖的parquet、httpfs插件
   02.测试duckdb是否能正常使用OSS,
   03.在postgresql中使用duckdb_fdw访问oss内的parquet文件

参考

  https://github.com/alitrack/duckdb_fdw	
  为什么我们放弃 RabbitMQ 并用 Postgres 队列取而代之? https://www.jdon.com/66350.html
   PostgreSQL 当MQ来使用 https://jiajunhuang.com/articles/2024_03_09-postgresql_as_mq.md.html	  

标签:Postgresql,数据源,扩展,queue,duckdb,PG,FDW,SQL,pg
From: https://www.cnblogs.com/ytwang/p/18373528

相关文章

  • 抖音集团 FlinkSQL 性能优化探索及实践
    本文作者:李精卫 更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 背景随着抖音集团内部对流式任务的需求不断增长,FlinkSQL作为一种低成本接入手段,已经在内部多个方向上得到大规模应用。目前,流式SQL任务的规模已经超过3万,任务资源......
  • Python开发中,SQLAlchemy 的同步操作和异步操作封装,以及常规CRUD的处理。
    在我们使用Python来和数据库打交道中,SQLAlchemy是一个非常不错的ORM工具,通过它我们可以很好的实现多种数据库的统一模型接入,而且它提供了非常多的特性,通过结合不同的数据库驱动,我们可以实现同步或者异步的处理封装。1、SQLAlchemy介绍SQLAlchemy 是一个功能强大且灵活的Python......
  • Prometheus+Grafana监控Mysql数据库
    安装配置Prometheus是Go语言编写的,所以仅依赖二进制编译库,从官网根据操作系统下载对应的二进制库:https://prometheus.io/download/解压到/usr/local/prometheus目录下tar-xzvfprometheus-2.45.2.linux-amd64.tar.gzmvprometheus-2.45.2.linux-amd64/usr/local/prometheus......
  • mybatis-plus配置自定义sqlInjector(使用InsertBatchSomeColumn),出现Invalid bound stat
    项目一开始未引入mybatis-plus,使用的是mybatis,配置文件为xml,有一个配置类中配置了SqlSessionFactory的相关内容。引入mybatis-plus后,想使用InsertBatchSomeColumn遇到Invalidboundstatement(notfound),多处配置发现没有效果并依旧报错,最终在刚才的配置类中的SqlSessionFact......
  • 深入探索分布式任务调度框架:MySQL实现高效锁机制
    本文主要介绍项目中怎么使用MySQL实现分布式锁的背景假如我们现在要做一个高性能、可扩展的分布式任务调度框架,要怎么设计呢?下面是我之前自己设计的一个架构图。为了方便后续的分布式锁的设计,我们大致描述下各个角色都做了哪些事情(这不是本篇文章的重点)scheduler-c......
  • 富文本编辑器ckeditor5的配置及二次扩展
    富文本编辑器配置及二次扩展1.官网地址一般遇到的问题,官网的文档都会有答案https://ckeditor.com/docs/ckeditor5/latest/features/media-embed.html2.项目背景新项目需要支持富文本编辑器操作,综合选择后使用ckeditor5遇到问题,支持用户自定义上传视频功能自定义开发流......
  • Mysql锁查看
    查看InnoDB的锁情况SHOWENGINEINNODBSTATUS;命令会返回一个包含详细InnoDB引擎状态的报告,其中包含当前锁的详细信息。在输出的LATESTDETECTEDDEADLOCK部分找到死锁信息,并在TRANSACTIONS部分找到当前的锁等待信息。查看MyISAM锁情况--方法一:查看表锁SHOWOPEN......
  • Mac导出Mysql千万级表数据
    MysqlDumpmysqldump-h[服务器地址]-u[用户名]-p[密码]--single-transaction--quick[数据库名][表名]>[导出文件.sql]•--single-transaction保证了数据的一致性,并且不会在导出期间锁定表(只针对InnoDB有效)。•--quick选项进一步减少了内存使用,因为它逐行导出数......
  • 【New SQL】 -- CockroachDB license change
    1、CockroachDB发布了修改开源协议的releases北京时间2024-08-16,CockroachDB发布了修改开源协议的releases。原文链接:LicensingFAQsEvolvingourself-hostedofferingandlicensemodelCockroachDBLicensechange(again)|ProductTalk2、引发讨论(1)国内N......
  • [VS Code扩展]写一个代码片段管理插件(二):功能实现
    @目录创建和插入代码片段代码片段列表代码片段预览代码片段编辑自定义映射默认映射自动完成项目地址创建和插入代码片段VSCode扩展提供了数据存储,其中globalState是使用全局存储的Key-Value方式来保存用户状态,支持在不同计算机上保留某些用户状态,详情请参考官方文档若在编辑器......