簡介
資料庫是應用程式效能的關鍵組件。效能良好與效能不佳的資料庫之間的差異,可能是影響整體應用程式效能的最重要因素。資料庫挑戰,例如查詢處理速度、擴展成本以及資料存取的容易程度,使得找到最佳化的平衡點變得困難。要在眾多考量因素中兼顧所有三者實屬不易。
在本文中,我們將討論資料庫快取,這是一種為資料庫實作的技術,旨在減輕上述部分挑戰。我們將介紹什麼是資料庫快取、在您的資料儲存區實作資料庫快取的優點,以及不同的資料庫快取策略。
查看 Prisma 資料平台,在單一位置管理您的所有應用程式資料。
什麼是資料庫快取?
資料庫快取是一種緩衝技術,可將經常查詢的資料儲存在暫時記憶體中。快取是一個高速資料儲存層,用於儲存經常讀取請求的資料子集。這種暫時性儲存層使得未來對這些資料的請求能夠比存取主要資料庫更快地得到服務。
資料庫快取策略透過減輕主要資料庫可能承受的負擔來協助您的主要資料庫。這最常見於將經常讀取資料的查詢重新導向到快取本身,而不是主要資料庫。快取本身可以位於資料庫、應用程式中,甚至可以作為獨立的存取層。
例如,您的應用程式首次從資料庫請求使用者資訊,此請求會從應用程式伺服器傳送到資料庫伺服器,並傳回請求的資訊。透過快取,此使用者設定檔會在初始讀取後更靠近請求者儲存,並且所有後續對該資料的讀取請求的查詢處理時間和資料庫工作負載都會顯著減少。
資料庫快取有哪些優點?
資料檢索速度極大地影響了應用程式的使用者體驗。在您的資料庫上實作快取策略可以提高資料庫效能、可用性和擴展性,且成本極低,具體取決於策略,所有這些因素都有助於提升整體正面的應用程式體驗。
效能
如前所述,資料庫快取透過使資料更易於存取來提升資料庫效能。快取充當應用程式參考經常調用的資料的「鍵盤快捷鍵」或「熱鍵」。
這種更快速的請求可以最大限度地減少資料庫的工作負載,使其免於花費大量無效率的時間來執行重複性任務。而是使這些任務更有效率,並簡化資料存取。
可用性
雖然快取並非 100% 容錯移轉策略,但它也為整體資料庫可用性帶來好處。根據快取的儲存位置,在主要資料庫伺服器因任何原因而無法使用時,快取仍然可以為應用程式提供一個調用資料的位置。
雖然資料庫效能通常是採用快取策略的主要原因,但在發生任何後端故障時,您還可以獲得額外的復原能力。
擴展性
與提高高可用性類似,資料庫快取對擴展性有正面影響。雖然它不應成為您資料庫擴展策略的主要考量因素,但實作快取以提高資料庫效能可以減少資料庫工作負載,從而將後端查詢分散到各個實體。
這種分散減輕了主要資料庫的負載,並可以降低成本,並在資料處理方面提供更大的彈性。此結果減輕了擴展的需求,並利用您已掌握的資源做得更多,從而可能將擴展需求推遲到未來。
有哪些不同的資料庫快取策略?
在將資料庫快取導入您的資料存取流程之前,務必考量哪種快取策略最適合這項工作。對於任何情境,資料庫與快取之間的關係都可能對效能和系統結構產生不同的影響。提前規劃並考慮所有選項將減少日後的麻煩。
要考慮的五種最常見策略是旁路快取 (Cache-Aside)、讀穿式快取 (Read-Through)、直寫式快取 (Write-Through)、回寫式快取 (Write-Back) 和繞寫式快取 (Write-Around)。我們將介紹每種策略的資料來源到快取關係和流程。
旁路快取 (Cache-Aside)
在旁路快取 (Cache-Aside) 配置中,資料庫快取與資料庫並排而坐。當應用程式請求資料時,它將首先檢查快取。如果快取具有資料(快取命中),則會傳回資料。如果快取沒有資料(快取未命中),則應用程式將查詢資料庫。然後,應用程式將資料儲存在快取中,以供後續查詢使用。
旁路快取 (Cache-Aside) 設計是一種良好的通用快取策略。此策略對於讀取密集型工作負載的應用程式特別有用。這使經常讀取的資料近在咫尺,以應對大量傳入的讀取請求。快取與資料庫分離還帶來了兩個額外的好處。在快取故障的實例中,依賴快取資料的系統仍然可以直接存取資料庫。這提供了一些復原能力。其次,由於快取是分離的,因此它可以採用與資料庫不同的資料模型。
另一方面,旁路快取 (Cache-Aside) 策略的主要缺點是存在資料庫不一致的窗口。通常,任何正在寫入的資料都將直接寫入資料庫。因此,快取可能存在與主要資料庫不一致的期間。根據您的需求,有不同的快取策略可以應對此問題。
讀穿式快取 (Read-Through)
在讀穿式快取 (Read-Through Cache) 配置中,快取位於應用程式和資料庫之間。可以將其想像成從應用程式到資料庫的直線,快取位於中間。在此策略中,應用程式將始終與快取對話以進行讀取,當快取命中時,資料會立即傳回。在快取未命中的情況下,快取將從資料庫填入遺失的資料,然後將其傳回給應用程式。對於任何資料寫入,應用程式仍將直接存取資料庫。
讀穿式快取 (Read-Through Cache) 也適用於讀取密集型工作負載。讀穿式快取 (Read-Through Cache) 與旁路快取 (Cache-Aside) 之間的主要區別在於,在旁路快取 (Cache-Aside) 策略中,應用程式負責提取資料並填入快取,而在讀穿式快取 (Read-Through Cache) 設定中,邏輯由函式庫或一些單獨的快取供應商完成。在快取和資料庫之間可能存在的資料不一致性方面,讀穿式快取 (Read-Through Cache) 設定與旁路快取 (Cache-Aside) 相似。
讀穿式快取 (Read-Through Cache) 策略也有一個缺點,即每當有新的讀取請求傳入時,都需要存取資料庫以取得資料。此資料以前從未快取過,因此需要載入資料。開發人員通常透過手動發出可能發生的查詢來「預熱」快取,以減輕這種延遲。
直寫式快取 (Write-Through)
直寫式快取 (Write-Through Caching) 策略與前面提到的兩種策略不同,因為它不會將資料寫入資料庫,而是先寫入快取,然後快取立即寫入資料庫。配置仍然可以像讀穿式快取 (Read-Through Cache) 策略一樣視覺化,在一條直線上,應用程式位於中間。
直寫式快取 (Write-Through Caching) 策略的好處是確保快取具有任何寫入的資料,並且沒有新的讀取會在快取從主要資料庫請求資料時遇到延遲。如果僅進行此配置,則存在額外寫入延遲的重大缺點,因為該操作必須先存取快取,然後再存取資料庫。這應該立即發生,但仍然會連續發生兩次寫入。
真正的好處來自於將直寫式快取 (Write-Through Caching) 與讀穿式快取 (Read-Through Cache) 配對使用。此策略將採用讀穿式快取 (Read-Through Cache) 策略的所有上述優點,並額外的好處是消除了資料不一致的可能性。
回寫式快取 (Write-Back)
回寫式快取 (Write-Back) 的工作方式幾乎與直寫式快取 (Write-Through Caching) 策略完全相同,但有一個關鍵細節除外。在回寫式快取 (Write-Back) 策略中,應用程式再次直接寫入快取。但是,快取不會立即寫入資料庫,而是在延遲後寫入。
透過延遲而不是立即寫入資料庫,可以減少寫入密集型工作負載中快取的壓力。這使得回寫式快取 (Write-Back) 和讀穿式快取 (Read-Through Cache) 的組合非常適合混合工作負載。這種配對可確保最新寫入的資料和存取的資料始終存在,並且可以透過快取存取。
快取到資料庫寫入的延遲可以提高整體寫入效能,如果支援批次處理,還可以減少整體寫入次數。這為節省一些成本和減少整體工作負載開啟了可能性。但是,在快取故障的情況下,如果尚未發生批次或延遲寫入資料庫,則此延遲會為可能的資料遺失打開大門。
繞寫式快取 (Write-Around)
繞寫式快取 (Write-Around Caching) 策略將與旁路快取 (Cache-Aside) 或讀穿式快取 (Read-Through Cache) 結合使用。在此配置中,資料始終寫入資料庫,而讀取的資料則存取快取。如果發生快取未命中,則應用程式將讀取資料庫,然後更新快取以供下次使用。
此特定策略在資料僅寫入一次且不更新的情況下將是最有效能的。資料很少讀取或根本不讀取。
結論
在本指南中,我們介紹了資料庫快取的概念。我們涵蓋了配置快取策略可以對您的資料庫和應用程式效能產生的主要優點。我們還討論了各種快取策略的基礎知識,以及如何視覺化和最佳化這些配置以協同工作。
配置最佳化您的快取和資料庫工作負載的快取策略,可以對您的應用程式的效能、可用性和擴展性產生重大的正面影響。重要的是要知道從哪裡開始以及您有哪些選擇。
查看 Prisma 資料平台,在單一位置管理您的所有應用程式資料。