在 PostgreSQL 上“回收”行的最 佳實踐(UPDATE vs INSERT + DELETE)
我籠統地搜尋了“UPDATE vs INSERT + DELETE”的回复,一致認為 UPDATE 更快,正如預期的那樣。
我的問題集中在一個小眾的案例上。假設您有一個相當高頻的臨時數據表。例如,在社交網路上建模通知,這些通知創建得非常頻繁,您總是會看到最新的 N。
保留最新的 N(比如 20)是否有意義,當一個進來時,第 N 行被更新為新的(包括 ID)。而不是插入一個新行,然後修剪舊行(可能在一段時間內批量)?
有什麼想法嗎?
Postgres 是 MVCC。無論操作是插入還是更新,每次寫入都會產生一個新的行版本。因此,我不希望提出的環形緩衝區樣式能夠帶來性能優勢。
使用單值系統和固定長度的行,我希望性能更快。不過,在我相信這是值得的之前,我希望看到一些徹底的測試。
UPDATE
語句或類似語句之間的性能問題INSERT
和DELETE
語句太寬泛,無法說出哪個更快。這將取決於在這兩種情況下使用的特定查詢以及其他因素,例如架構結構和體系結構,包括表的索引方式。為了解決您的具體範例,我將假設您實際上指的是提要,例如
StatusFeed
Facebook 中的提要,它只是前 N 個項目,並且非常短暫,即它在每次刷新頁面時都會發生變化(因為我考慮Notifications
不是很短暫,並且總是期望相同Notifications
的內容等待我查看,無論我刷新頁面多少次)。在這樣的範例中,可以使用傳統的RDBMS,例如 PostgreSQL,但對於不需要太多持久性的東西的選擇可能有點過度架構。正如 Caius Jard 指出的那樣,您可能更適合使用為高頻和低持久性設計的東西,例如記憶體解決方案,甚至可能是文件數據儲存,因為模式很簡單並且不需要太多關係邏輯支持這樣的案例。
如果您仍然(就其理論而言)嘗試使用傳統的RDBMS來實現這一點,那麼您可能會生成更少的事務,因此只做
UPDATES
與INSERTS
and相對的成本會稍微少一些DELETES
。但同樣,至於哪種方法總體上更快或引起的爭用最少,將在很大程度上取決於架構的架構方式。