本章内容
apache thrift
使用apache thrift實作圖模式
序列化架構的局限性
在第2章中,你知道了形成一個資料模型的原則—原始資料的價值、處理語義規範化和不變性的至關重要作用。你知道了圖模式可以滿足所有這些屬性,并了解了superwebanalytics.com的圖模式。
本章是第一個示例章節,将使用現實世界的工具示範前一章的概念。你可以隻閱讀本書的理論章節,學習整個lambda架構,但示例章節展示了将理論轉換為真正代碼的細微差異。在本章中,我們将使用apache thrift實作superwebanalytics.com的資料模型—apache thrift是一個序列化架構。你會看到,即使在一個類似寫模式的簡單任務中,理想化的理論和實踐中的實作之間也是有沖突的。
許多開發人員都曾将原始資料寫為無模式的格式,如json。這是有吸引力的,因為它很容易入門,但這種方法很容易會導緻問題。無論是由于錯誤還是不同開發人員之間的誤解,資料損壞會不可避免地發生。根據經驗,資料損壞錯誤是調試起來最耗時的錯誤之一。
資料損壞問題很難調試,因為你很難知道損壞是如何發生的。通常隻有當處理的下遊出現錯誤時,你才會注意到這一問題—在損壞的資料已經寫入很長一段時間之後。例如,由于必需字段的丢失,你可能會得到一個空指針異常。你很快就會意識到這是由一個丢失的字段引起的,但絕對不會第一時間知道資料為什麼會這樣。
當建立一個可實施的模式時,你會在寫資料時獲得錯誤—傳回完整的關于資料如何以及為什麼變得無效的上下文(類似堆棧跟蹤)。此外,錯誤阻止了程式通過寫入這些資料來損壞主資料集。
序列化架構是一種能實作可實施模式的簡單途徑。如果你曾使用過面向對象和靜态類型語言,那麼會很快熟悉序列化架構的使用方法。序列化架構可以生成任何你希望用來讀、寫和驗證可比對模式的對象的代碼。
然而,當談到實作全面嚴格的模式時,序列化架構是有局限性的。讨論完如何将序列化架構應用到superwebanalytics.com資料模型之後,我們将讨論這些局限性及其解決方法。