SSD 會降低數據庫的實用性嗎
我今天才聽說羅伯特·馬丁,他似乎是軟體界的知名人物,所以我的意思並不是讓我的頭銜看起來像是點擊誘餌或我在他嘴裡說的話,但這只是我如何以我有限的經驗和理解來解釋我從他那裡聽到的。
我今天在看一個影片(關於軟體架構),在 Robert C. Martin 的演講中,在影片的後半部分,數據庫的主題是主要焦點。
根據我對他所說的話的理解,他似乎是在說 SSD 會降低數據庫的有用性(相當大)。
為了解釋我是如何得出這種解釋的:
他討論瞭如何使用 HDD/旋轉磁碟檢索數據很慢。然而,他指出,這些天我們使用 SSD。他從“RAM 即將到來”開始,然後繼續提到 RAM 磁碟,但隨後說他不能稱它為 RAM 磁碟,所以只說 RAM。所以對於 RAM,我們不需要索引,因為每個字節都需要相同的時間來獲取。(這一段是我轉述的)
因此,他建議 RAM(如電腦記憶體)作為 DB 的替代品(正如我將他的陳述解釋為那樣)沒有意義,因為這就像說所有記錄都是在應用程序的生命週期內處理的記憶體中(除非您按需從磁碟文件中提取)
所以,我想到了RAM,他的意思是SSD。因此,在這種情況下,他說 SSD 會降低數據庫的實用性。他甚至說:“如果我是甲骨文,我會害怕。我存在的基礎正在蒸發。”
根據我對 SSD 的一點了解,與
O(n)
尋找時間的 HDD 不同(我認為),SSD 接近O(1)
或幾乎是隨機的。所以,他的建議對我來說很有趣,因為我從來沒有這樣想過。幾年前我第一次被介紹到數據庫時,當一位教授描述正常文件系統的好處時,我得出結論,數據庫的主要作用本質上是一個非常索引的文件系統(以及優化、記憶體、並發訪問、等),因此,如果 SSD 中不需要索引,這種情況確實會降低數據庫的用處。儘管如此,儘管我是一個新手,但我很難相信它們變得不那麼有用了,因為每個人仍然使用數據庫作為其應用程序的主要點,而不是純粹的文件系統,並且感覺好像他過於簡單化了數據庫的作用。
注意:我確實看到了最後以確保他沒有說不同的話。
供參考: 42 :22是整個數據庫主題出現的時候, 43 :52是他從“為什麼我們甚至有數據庫”開始的時候
這個答案確實說 SSD 大大加快了數據庫的速度。 這個問題詢問優化是如何改變的。
對於TL;DR我的問題,SSD 在伺服器市場上的廣泛使用(無論是即將到來還是已經發生)是否會降低數據庫的有用性?
似乎展示者試圖傳達的是,使用 SSD,人們可以將數據儲存在磁碟上,而不必擔心使用舊 HDD 檢索數據的速度有多慢,就像使用 SSD 一樣,尋軌時間很近
O(1)
(我想)。因此,如果這是真的,那將失去它所擁有的優勢之一:索引,因為擁有索引以獲得更快的查找時間的優勢已經消失。
當您使用 SSD 時,數據庫中的某些內容應該進行調整。例如,對於 PostgreSQL,您可以調整
effective_io_concurrency
, 和random_page_cost
. 然而,更快的讀取和更快的隨機訪問並不是數據庫所做的。它確保
- ACID(原子性、一致性、隔離性、持久性)
- 某種形式的並發控制,MVCC(多版本並發控制)
- 對庫(XQuery 或 SQL)的標準化訪問
他對索引的看法是錯誤的。如果整個表都可以讀入 ram,那麼索引仍然有用。不相信我?讓我們做一個思想實驗,
- 想像一下,您有一個帶有一個索引列的表。
CREATE TABLE foobar ( id text PRIMARY KEY );
- 想像一下,該表中有 5 億行。
- 想像一下,所有 5 億行都連接在一起形成一個文件。
什麼更快,
grep 'keyword' file
SELECT * FROM foobar WHERE id = 'keyword'
這不僅與數據的位置有關,還與您如何訂購數據以及必須執行哪些操作才能找到所需內容有關。PostgreSQL 支持 B-tree、Hash、GiST、SP-GiST、GIN 和 BRIN 索引(並通過擴展支持 Bloom)。你會愚蠢地認為所有這些數學和功能都消失了,因為你有更快的隨機訪問。