什麼是具體化視觀表?
具體化視觀表是透過合併多個現有資料表中的資料以加快資料擷取速度所建立的重複資料表。例如,假設零售應用程式有兩個分別用於客戶和產品資料的基礎資料表。客戶資料表中包含客戶名稱和聯絡細節等資訊,而產品資料表中則包含產品詳細資訊和成本的相關資訊。客戶資料表僅儲存個別客戶所購買項目的產品 ID。您必須交互參照兩個資料表,才能取得特定客戶所購買項目的產品詳細資訊。您可以改為建立具體化視觀表,將客戶名稱及相關的產品詳細資訊儲存在單一的臨時資料表中。您可以在具體化視觀表上建立索引結構,以提升資料讀取效能。
具體化視觀表的優點為何?
具體化視觀表可用於快速且高效地存取相關資料,有助於優化資料密集型應用程式中的查詢。接下來我們會介紹一些主要優點。
速度
讀取查詢會掃描不同的表格和資料列以收集必要的資訊。透過具體化視觀表,您可以直接在新的視觀表中查詢資料,而不必每次都計算新資訊。您的查詢越複雜,使用具體化視觀表節省的時間就越多。
簡化資料儲存
具體化視觀表可讓您將複雜的查詢邏輯整合到一個資料表中。如此一來,開發人員便更容易進行資料轉換和程式碼維護。該表還可以使複雜的查詢更易於管理。您也可以使用資料子設定來減少視觀表需要複製的資料量。
一致性
具體化視觀表會提供在特定時刻擷取的一致資料視觀表。您可以在具體化視觀表中設定讀取一致性,即使在需要並行控制的多使用者環境中也能存取資料。
即使來源資料變更或遭到刪除,具體化視觀表的資料也可供存取。隨時間推移,這表示您可以使用具體化視觀表來報告以時間為基礎的資料快照集。與來源資料表的隔離層級可確保您的資料之間擁有更高程度的一致性。
改善存取控制
透過具體化視觀表,您可以控制可存取特定資料的人員。您可以為使用者篩選資訊,無需授予他們來源表格的存取權。如果想要控制人員對資料的存取權,以及他們可查看和互動的資料範圍,此方法便非常實用。
具體化視觀表的使用案例為何?
具體化視觀表在許多情況中都能派上用場。
分配篩選的資料
如果您需要將最近的資料分配到許多位置 (例如遠端工作人員),具體化視觀表便可提供協助。透過具體化視觀表,您可以將資料複製並散佈到許多站點。需要存取資料的人員可透過距離最近的複製資料存放區與資料互動。
該系統允許並行處理,並降低網路負載。這對唯讀資料庫來說是一種有效的方法。
分析時間序列資料
具體化視觀表可提供資料集的時間戳記快照,因此您可以建立資訊隨時間變更的模型。您可以儲存預先計算的資料彙總,例如每月或每週摘要。這些使用方式對於商業智慧和報告平台很有幫助。
遠端資料互動
在分散式資料庫系統中,您可以使用具體化視觀表來優化關於遠端伺服器資料的查詢。您可以擷取資料並儲存在本機具體化視觀表中,而不必反覆從遠端來源擷取資料。如此可減少網路通訊的需求,並提升效能。
例如,如果您的資料來自外部資料庫或 API,具體化視觀表會整合並協助處理資料。
定期批次處理
具體化視觀表對於需要定期批次處理的情況很有幫助。例如,金融機構可能會使用具體化視觀表來儲存日結餘額和利息計算。或者,他們可能會儲存投資組合績效摘要,這些摘要可在每個工作日結束時重新整理。
具體化視觀表的運作方式?
具體化視觀表的工作方式是透過預先計算,將特定查詢的結果儲存為資料庫中的實體資料表。資料庫會定期執行預先計算,或是使用者可透過特定事件觸發計算。管理員要監督具體化視觀表的效能和資源使用率,以確保能持續符合預期的用途。
具體化視觀表運作方式的一般概述如下。
具體化視觀表
您可以定義從一或多個來源表格擷取所需資料的查詢,藉此建立具體化視觀表。根據需要,此查詢可包括篩選、彙總、聯結和其他作業。
資料庫一開始會針對來源資料執行定義的查詢,以填入具體化視觀表。查詢結果會以實體資料表的形式儲存在資料庫中,而此表格就代表具體化視觀表。
更新具體化視觀表
具體化視觀表中的資料需要定期更新,才能反映來源表格中基礎資料的變更。資料重新整理頻率取決於使用案例和需求。
接下來,我們將說明一些常見的資料重新整理方法。
完全重新整理
具體化視觀表會完全重新計算,並以最新的查詢結果覆寫。這是最簡單的方法,但可能會消耗大量資源,特別是對於大型具體化視觀表。
增量重新整理
只將基礎資料中的變更套用至具體化視觀表。處理大型資料集且頻繁更新時,這種方法可能會比完全重新整理更有效率。
隨需重新整理
有些系統允許隨需重新整理具體化視觀表,由特定事件或使用者要求觸發。如此可更有效地控制資料更新時機,但需要審慎管理才能確保具體化視觀表保持在最新狀態。
不同系統的技術差異
每個資料庫管理系統建立具體化視觀表的方法都各不相同。
資料庫管理系統 |
具體化視觀表的運作方式 |
PostgreSQL |
使用 PostgreSQL 時,您必須手動重新整理具體化視觀表,重新計算整個視觀表。具體化視觀表會填入建立當下的資料。 |
MySQL |
MySQL 不支援具體化視觀表。 |
Oracle |
Oracle 會自動重新整理具體化視觀表,但您也可以選擇隨需重新整理。您也可以撰寫 SQL 陳述式,提示視觀表在傳送結果之前重新整理。 |
SQL Server |
SQL Server 使用「已編製索引檢視 (Indexed View)」這個名稱,因為具體化是建立一般檢視表索引的一個步驟。您只能使用其已編製索引檢視來執行基本 SQL 查詢。這些檢視會為使用者自動更新。 |
MongoDB |
MongoDB 使用彙總函數來提供與具體化視觀表類似的功能,但適用於 NoSQL 環境。 |
視觀表和具體化視觀表有什麼區別?
在關聯式資料庫中,視觀表是透過轉換和組合多個基礎表格資料所建立的臨時表格。這是一個虛擬表格,本身不儲存任何資料。相反地,該表的定義是基於對一或多個來源資料表的查詢。
每當使用者查詢視觀表時,資料庫引擎就會透過對來源表格執行基礎查詢來動態計算結果。視觀表一律會顯示最新的資料,因為每次存取該表時都直接衍生自來源表格。
而另一方面,具體化視觀表則是將特定查詢的結果儲存為資料庫中的實體資料表。具體化視觀表中的資料會預先計算並儲存,這表示結果已可供使用,而不需要在每次存取檢視時重新計算查詢。
不過,具體化視觀表中的資料不一定是最新狀態。您必須設定更新頻率,才能在資料新舊程度和查詢效能之間取得平衡。
具體化視觀表有哪些挑戰?
具體化視觀表是另一個需要考慮的資料庫元件,因此在維護方面又增加了另一層複雜性。您必須在查詢和效率效益,以及潛在儲存成本和資料一致性問題之間取得平衡。
您必須建立觸發更新的有效規則,以確保具體化視觀表仍可發揮效益。頻繁更新具體化視觀表可能會影響系統效能,尤其是您處於尖峰期間時。此外,具體化視觀表在複製資料時也會佔用大量空間。如果您有一個不斷更新的大型資料庫,具體化視觀表的儲存空間需求可能會非常大。
如果您要使用具體化視觀表,則需要設定清除重新整理規則和排程。您也必須瞭解如何處理資料不一致、重新整理失敗,以及增加的儲存空間壓力。
AWS 如何協助您滿足具體化視觀表需求?
具體化視觀表是一款強大的工具,可改善 Amazon Redshift 的查詢效能。
Amazon Redshift 使用機器學習持續監控工作負載,並在有益的情況下建立新的具體化視觀表。Redshift 中的此自動具體化視觀表 (AutoMV) 功能提供與使用者建立之具體化視觀表相同的效能優勢。
AutoMV 功能可以在許多方面讓您受益:
- 在建立具體化視觀表和將其保持最新的成本與查詢延遲的預期效益之間取得平衡
- 監控先前建立的 AutoMV,並在不再有益時將其捨棄
- 使用與使用者建立之具體化視觀表相同的條件和限制,自動和逐步進行重新整理
此外,開發人員不需要修改查詢即可利用 AutoMV。使用具體化視觀表的自動查詢重寫確定了可受益於系統建立之 AutoMV 的查詢。它會自動重寫這些查詢以使用 AutoMV,從而提高查詢效率。
立即建立帳戶,開始使用 AWS 上的具體化視觀表。