您好,登錄后才能下訂單哦!
編譯 | 佑銘
參考-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](https://wiki.postgresql.org/wiki/Foreigndatawrappers)。
外部數據封裝器是將 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 變成時間序列存儲/流處理器。
還有超多插件、工具和圖形界面,戳 https://github.com/dhamaniasad/awesome-postgres 可以一覽無余。
寶刀未老
讓這一切真正不同凡響的是 Postgres 設立的典范:對于任何軟件來說,22 年屹立不倒幾乎是不可能的 —— 但保持不懈專注并投入數十年來完善、改進和優化已經很強大的核心足以打造一項 不管是現在還是 90 年代都舉足輕重的技術。
— 完 —
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。