SQL_Postgresql-一些擴充套件和應用

辰令發表於2024-08-22

資料庫

資料庫上託應用,下連基礎設施,是整個 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	  

相關文章