--- title: 第三部分:派生資料 weight: 300 breadcrumbs: false --- {{< callout type="warning" >}} 當前頁面來自本書第一版,第二版尚不可用 {{< /callout >}} 在本書的 [第一部分](/tw/part-i) 和 [第二部分](/tw/part-ii) 中,我們自底向上地把所有關於分散式資料庫的主要考量都過了一遍。從資料在磁碟上的佈局,一直到出現故障時分散式系統一致性的侷限。但所有的討論都假定了應用中只用了一種資料庫。 現實世界中的資料系統往往更為複雜。大型應用程式經常需要以多種方式訪問和處理資料,沒有一個數據庫可以同時滿足所有這些不同的需求。因此應用程式通常組合使用多種元件:資料儲存、索引、快取、分析系統等等,並實現在這些元件中移動資料的機制。 本書的最後一部分,會研究將多個不同資料系統(可能有著不同資料模型,並針對不同的訪問模式進行最佳化)整合為一個協調一致的應用架構時,會遇到的問題。軟體供應商經常會忽略這一方面的生態建設,並聲稱他們的產品能夠滿足你的所有需求。在現實世界中,整合不同的系統是實際應用中最重要的事情之一。 ## 記錄系統和派生資料系統 從高層次上看,儲存和處理資料的系統可以分為兩大類: 權威記錄系統(System of record) : **記錄系統**,也被稱為 **真相源(source of truth)**,持有資料的權威版本。當新的資料進入時(例如,使用者輸入)首先會記錄在這裡。 每個事實正正好好表示一次(表示通常是 **正規化的**,即 normalized)。如果其他系統和 **記錄系統** 之間存在任何差異,那麼記錄系統中的值是正確的(根據定義)。 派生資料系統(Derived data systems) : **派生系統** 中的資料,通常是另一個系統中的現有資料以某種方式進行轉換或處理的結果。如果丟失派生資料,可以從原始來源重新建立。 典型的例子是 **快取(cache)**:如果資料在快取中,就可以由快取提供服務;如果快取不包含所需資料,則降級由底層資料庫提供。非規範化的值,索引和物化檢視亦屬此類。在推薦系統中,預測彙總資料通常派生自使用者日誌。 從技術上講,派生資料是 **冗餘的(redundant)**,因為它重複了已有的資訊。但是派生資料對於獲得良好的只讀查詢效能通常是至關重要的。它通常是非規範化的。可以從單個源頭派生出多個不同的資料集,使你能從不同的 “視角” 洞察資料。 並不是所有的系統都在其架構中明確區分 **記錄系統** 和 **派生資料系統**,但是這是一種有用的區分方式,因為它明確了系統中的資料流:系統的哪一部分具有哪些輸入和哪些輸出,以及它們如何相互依賴。 大多數資料庫,儲存引擎和查詢語言,本質上既不是記錄系統也不是派生系統。資料庫只是一個工具:如何使用它取決於你自己。**記錄系統和派生資料系統之間的區別不在於工具,而在於應用程式中的使用方式。** 透過梳理資料的派生關係,可以清楚地理解一個令人困惑的系統架構。這將貫穿本書的這一部分。 ## 章節概述 我們將從 [第十一章](/tw/ch11) 開始,研究例如 MapReduce 這樣 **面向批處理(batch-oriented)** 的資料流系統。對於建設大規模資料系統,我們將看到,它們提供了優秀的工具和思想。 [第十二章](/tw/ch12) 將把這些思想應用到 **流式資料(data streams)** 中,使我們能用更低的延遲完成同樣的任務。[第十三章](/tw/ch13) 將對本書進行總結,探討如何使用這些工具來構建可靠,可伸縮和可維護的應用。 ## [第十一章:批處理](/tw/ch11) - [使用Unix工具的批處理](/tw/ch11#使用unix工具的批處理) - [MapReduce和分散式檔案系統](/tw/ch11#mapreduce和分散式檔案系統) - [MapReduce之後](/tw/ch11#mapreduce之後) - [本章小結](/tw/ch11#本章小結) - [參考文獻](/tw/ch11#參考文獻) ## [第十二章:流處理](/tw/ch12) - [傳遞事件流](/tw/ch12#傳遞事件流) - [資料庫與流](/tw/ch12#資料庫與流) - [流處理](/tw/ch12#流處理) - [本章小結](/tw/ch12#本章小結) - [參考文獻](/tw/ch12#參考文獻) ## [第十三章:資料系統的未來](/tw/ch13) - [資料整合](/tw/ch13#資料整合) - [分拆資料庫](/tw/ch13#分拆資料庫) - [將事情做正確](/tw/ch13#將事情做正確) - [做正確的事情](/tw/ch13#做正確的事情) - [本章小結](/tw/ch13#本章小結) - [參考文獻](/tw/ch13#參考文獻)