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資料庫
- Postgres 資料庫(一)基本命令資料庫
- Postgres正在蠶食資料庫世界資料庫
- dimitri/pgcopydb:Postgres資料庫複製工具MITGC資料庫
- StarCoder: 最先進的程式碼大模型大模型
- Guix:最先進的作業系統?GUI作業系統
- Pnpm: 最先進的包管理工具NPM
- 【C#進階】LINQ和資料庫操作_2024-06-22C#資料庫
- 在ef core中使用postgres資料庫的全文檢索功能實戰資料庫
- ApiLeaf·可能是史上最省事的文件生成工具API
- Spring Boot 仍然是最先進的嗎? - ralphSpring Boot
- 執行在容器中Postgres資料庫資料損壞後如何恢復?資料庫
- 這可能是史上最全的Python演算法集!Python演算法
- 最先進的三維建模解決方案,速看!
- 鵝廠資料庫的進階之路資料庫
- check_postgres指令碼集檢查資料庫健康情況指令碼資料庫
- 在ef core中使用postgres資料庫的全文檢索功能實戰之中文支援資料庫
- [這可能是最好的Spring教程!]JDBC中資料庫的連線與查詢SpringJDBC資料庫
- 4月22日丨【雲資料庫技術沙龍】技術進化,讓資料更智慧資料庫
- 大家好,22歲的看雪前來報到!
- 探索 Python/Django 支援分散式多租戶資料庫,如 Postgres+CitusPythonDjango分散式資料庫
- 一點點進步的OceanBase資料庫文件!資料庫
- Tkinter (22) 標準化外觀及選項資料庫資料庫
- 吐血總結|史上最全的MySQL學習資料!!MySql
- 史上最全、最詳細的Docker學習資料Docker
- .NET 資料庫事務的各種玩法進化資料庫
- 資料庫 資料庫的完整性資料庫
- 生產資料庫、開發資料庫、測試資料庫中的資料的區分資料庫
- 第一家GraphQL即服務公司出現,瞄準的第一個資料庫便是Postgres!資料庫
- 使用 Postgres、Debezium 和 Kafka 流式傳輸資料Kafka
- 【資料庫】Redis進階篇資料庫Redis
- 可能是目前最快的struct複製庫Struct
- 22_Oracle資料庫全表掃描詳解(二)Oracle資料庫
- 到了22歲還能矯正牙齒麼?戳此文就知22歲矯正牙齒需要多久
- 大資料概念:史上最全大資料解析大資料
- Oracle資料庫-----資料庫的基本概念Oracle資料庫
- 【資料庫設計】資料庫的設計資料庫