22 歲的 Postgres,可能是史上最先進的資料庫
編譯 | 佑銘
參考-https://arcentry.com/blog/postgres-might-just-be-the-most-advanced-database-ever/(文-Wolfram Hempel)
轉自 | 優達學城
作為一個技術人,我參與過的很多爭論歸根到底無非就是一個問題:嘗試新技術還是堅持老技術?儘管這個問題總是爭論不休,但對於少數技術來說,答案是簡單的:兩個都要!
Postgres 就是這樣一項技術。1982 年開始開發、1996 年釋出,至今已經 22 歲了。然而從很多方面來說,它仍是很現代的資料庫管理系統。它不僅具有簡直是令人難以置信的功能集,而且超越了單純的資料庫,演變成一個完全可程式設計的整合資料環境,並配有自己的程式語言 PL/pgSQL。
Postgres 有無數神奇之處,但在這篇文章中,我只會闡明使它成為 Arcentry 後端選擇的 5 個卓越特性:
Pub/Sub 訊息
Postgres 可以用作可群集的訊息代理。 當然,它不像 RabbitMQ 或 Kafka 提供專用解決方案的功能集,但將基於事件的訊息傳遞整合到更廣泛的資料上下文中使 Postgres 極具價值。 例如,Arcentry 的內部部署版本使用了這種模式。 我們使用 Postgres-Messaging 作為橫向可擴充套件部署的主幹:
每當使用者對任何圖表進行更改時,Arcentry 都會向伺服器發出請求,該請求會將更新合併到Postgres 中儲存的二進位制 JSON 文件中。 一旦確認寫入,觸發器就會觸發一個所有其它已連線的伺服器訂閱的事件,並依次將更新轉發給其活動使用者。
這為我們提供了一種簡單的方法來提供具有強一致性的水平可擴充套件實時更新 —— 所有這些都來自單個外部依賴。
觸發器
觸發器是在運算元據之前或之後執行的函式。 使用觸發器是在資料庫直接構建驗證、轉換和派生邏輯的絕佳方式。
觸發器還提供了一種擴充套件現有資料庫功能的簡單方法。 例如,能夠實現客戶對 Arcentry 帳戶表進行更改的不可變審計日誌。
我們沒有寫一個額外的查詢或服務介面,而是直接在 Postgres 寫了一個觸發器,一旦賬號表中的一行有改動就執行,在一個單獨的審計表中寫入當前行的副本並加上時間戳和發起改動的 userID。
外部資料封裝器
有時候,無論是查詢使用者賬號還是將文件資料儲存在已建立的結構,將使用者現有的資料庫整合到 Arcentry 中不失為一個好操作。 當然有很多方法可以實現這一目標,但一個特別方便的方法是用 Postgres 的[外部資料封裝器 Foreign Data Wrappers]()。
外部資料封裝器是將 Postgres 連線到任意數量的其他資料來源如 MongoDB,Redis,MySQL 甚至 CSV 或 JSON 檔案的介面。 這樣一來,對於查詢語句來說,這些資料來源就變成普通的 Postgres 表,可以連結、搜尋、引用併成為資料庫的有機組成部分 —— 讓 Postgres 成為強大的整合工具和資料湖設定的潛在訪問點。
JSONB
許多資料庫採用 JSON 格式或其二進位制表示,JSONB 儲存 ——嗯,確實沒什麼新意。 但Postgres的操作功能使 JSON 成為基於表的關聯式資料庫中的一等公民。 無論是輸出查詢結果是巢狀的 JSON 結構還是動態解析 JSON,Postgres 都可以優雅地處理。
外掛
總有 PL/pgSQL 和觸發器都不能滿足需求的時候。對很多別的資料庫來說,可能就這樣了。但 Postgres 擴充套件性極強。寫 Postgres 外掛確實不容易( 相信我,我試過),但萬幸的是,很多厲害的工程師已經為我們做好了開發工作,構建了很多讓 Postgres 大變身的外掛。
比如把 Postgres 伺服器變成一個完全成熟的地理資訊系統(GIS)空間資料庫的 PostGIS 。
或者 PostlineDB 將 Postgres 變成時間序列儲存/流處理器。
還有超多外掛、工具和圖形介面,戳 可以一覽無餘。
寶刀未老
讓這一切真正不同凡響的是 Postgres 設立的典範:對於任何軟體來說,22 年屹立不倒幾乎是不可能的 —— 但保持不懈專注並投入數十年來完善、改進和最佳化已經很強大的核心足以打造一項 不管是現在還是 90 年代都舉足輕重的技術。
— 完 —
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31545814/viewspace-2286027/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 80歲Postgres創始人、資料庫領域“祖師爺”想顛覆資料庫設計資料庫
- MySQL資料庫遷移到PostgresMySql資料庫
- 配置postgres9.3間的fdw——實現不同postgres資料庫間的互訪問資料庫
- Postgres正在蠶食資料庫世界資料庫
- Postgres 資料庫(一)基本命令資料庫
- dimitri/pgcopydb:Postgres資料庫複製工具MITGC資料庫
- 使用psql連線Postgres資料庫SQL資料庫
- Guix:最先進的作業系統?GUI作業系統
- Postgres進行資料結構變化時的提效小技巧資料結構
- Pnpm: 最先進的包管理工具NPM
- StarCoder: 最先進的程式碼大模型大模型
- ApiLeaf·可能是史上最省事的文件生成工具API
- 在ef core中使用postgres資料庫的全文檢索功能實戰資料庫
- PostgreSQL的遠端資料操作—postgres_fdwSQL
- 3月資料庫排名 —— Postgres 上升到第 4 位資料庫
- 執行在容器中Postgres資料庫資料損壞後如何恢復?資料庫
- Spring Boot 仍然是最先進的嗎? - ralphSpring Boot
- 最先進的三維建模解決方案,速看!
- 這可能是史上最全的Python演算法集!Python演算法
- check_postgres指令碼集檢查資料庫健康情況指令碼資料庫
- 鵝廠資料庫的進階之路資料庫
- 在ef core中使用postgres資料庫的全文檢索功能實戰之中文支援資料庫
- sqlite操作--- oracle資料庫中的資料導進sqliteSQLiteOracle資料庫
- Linux上最先進的免費賽車遊戲:StuntRally 2.4Linux遊戲
- 史上最全的“大資料”學習資源(上)大資料
- 史上最強的資料分頁方法 (轉)
- [R]可能是史上程式碼最少的協同過濾推薦引擎
- 資料庫mysql8.0.22的安裝與使用資料庫MySql
- 利用binlog進行資料庫的還原資料庫
- 站在騰訊雲資料庫的2022年看中國資料庫的現狀和未來資料庫
- 流動的藝術盛宴,這可能是遊戲史上最被低估的遊戲之一?遊戲
- 吐血總結|史上最全的MySQL學習資料!!MySql
- 史上最全、最詳細的Docker學習資料Docker
- 探索 Python/Django 支援分散式多租戶資料庫,如 Postgres+CitusPythonDjango分散式資料庫
- 資料庫複製方式進行資料庫恢復資料庫
- 使用 Postgres、Debezium 和 Kafka 流式傳輸資料Kafka
- 使用資料庫冷備份方式進行資料庫遷移,資料庫檔案遷移到不同的目錄資料庫
- 4月22日丨【雲資料庫技術沙龍】技術進化,讓資料更智慧資料庫