通過將數據保存為 BLOB 來線上 ALTER TABLE
你能解釋一下如何
extreme de-normalization (store the value as a serialized blob
幫助線上更改表嗎?資源此外,能夠更改架構至關重要:要麼使用可以線上完成 ALTER TABLE 的數據庫,解決數據庫的限制並建構一種非破壞性執行 ALTER TABLE 的方法,要麼使用極端的反規範化(將值儲存為序列化 blob 以及可用於推斷當時使用的模式的版本)。這對於任何類型的實時數據庫驅動的應用程序可能都很重要,但對於一直添加新功能(例如,新的配置文件欄位)的社交網路至關重要。
這不是這個意思。很少有系統可以在不使系統離線的情況下更改模式——即使是現代數據庫通常也需要獨占表鎖和表重寫來刪除列。這在某些工作負載中會出現問題。考慮一個可以添加欄位和刪除欄位的通訊錄。如果這些操作中的每一個都通過發出 來更改數據的架構
ALTER TABLE
,那麼您絕對會陷入混亂。這不是模式應該如何工作的。所以你有兩個傳統的選擇,
- 無模式數據,
- 實體-屬性-值模型(通常是無模式和無類型的,而且速度較慢。)
無模式數據
將列儲存為序列化 blob可能聽起來很糟糕,但這只是因為 DBA通常不具備這種工程級別的能力,並且那裡可能存在龍。實現二進制類型只是超出了他們的薪酬等級。這正是高級類型在幕後發生的情況。以 PostgreSQL 為例,
這些類型實際上是引擎蓋下的二進制 blob。數據庫只是為它們提供運算符和字元串化。在 PostgreSQL 中,它們是TOASTABLE二進制類型。
之前
JSONB
和之前hstore
,我們用 . 來實現同樣的事情Storable::nfreeze
。這就是作者所說的極端士氣低落。您序列化對象的版本(元數據)和對象本身並將整個事物轉儲到數據庫中。DBA 使用聲明性語言 (SQL) 編寫並建模和查詢關係數據。這與創建 JSONB 之類的所需技能完全不同。我們是與 Stackoverflow 不同的社區,因為我們擁有不同的技能組合。有多少個數據庫
hstore
,或者jsonb
——甚至是SQL 數組?這些都是難題。做對是 DBA 的一項利基技能。