22 歲的 Postgres,可能是史上最先進的資料庫

資料庫頻道發表於2018-12-21

編譯 | 佑銘

參考-https://arcentry.com/blog/postgres-might-just-be-the-most-advanced-database-ever/(文-Wolfram Hempel)

轉自 | 優達學城

22 歲的 Postgres,可能是史上最先進的資料庫

作為一個技術人,我參與過的很多爭論歸根到底無非就是一個問題:嘗試新技術還是堅持老技術?儘管這個問題總是爭論不休,但對於少數技術來說,答案是簡單的:兩個都要!

22 歲的 Postgres,可能是史上最先進的資料庫

Postgres 就是這樣一項技術。1982 年開始開發、1996 年釋出,至今已經 22 歲了。然而從很多方面來說,它仍是很現代的資料庫管理系統。它不僅具有簡直是令人難以置信的功能集,而且超越了單純的資料庫,演變成一個完全可程式設計的整合資料環境,並配有自己的程式語言 PL/pgSQL。

Postgres 有無數神奇之處,但在這篇文章中,我只會闡明使它成為 Arcentry 後端選擇的 5 個卓越特性:

Pub/Sub 訊息

Postgres 可以用作可群集的訊息代理。 當然,它不像 RabbitMQ 或 Kafka 提供專用解決方案的功能集,但將基於事件的訊息傳遞整合到更廣泛的資料上下文中使 Postgres 極具價值。 例如,Arcentry 的內部部署版本使用了這種模式。 我們使用 Postgres-Messaging 作為橫向可擴充套件部署的主幹:22 歲的 Postgres,可能是史上最先進的資料庫

每當使用者對任何圖表進行更改時,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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章