讀資料工程之道:設計和構建健壯的資料系統17儲存的原材料

躺柒發表於2024-10-23

1. 儲存

1.1. 儲存是資料工程生命週期的基石

  • 1.1.1. 是資料獲取、轉換和服務主要階段的基礎

  • 1.1.1.1. 當構建資料管道時,隨著資料經過獲取、轉換和服務階段,工程師會選擇適當的抽象來儲存他們的資料

  • 1.1.2. 當資料在生命週期中移動時,它會被多次儲存

  • 1.1.2.1. 必須在儲存中持續存在,直到系統準備好消費它以進一步處理和傳輸

1.2. 瞭解資料的使用情況和你將來檢索它的方式是為你的資料架構選擇合適的儲存解決方案的第一步

1.3. 源系統通常不是由資料工程師維護或控制的

1.4. 資料工程師直接處理的儲存

  • 1.4.1. 包含了資料工程生命週期的各個階段,包括從源系統中提取資料,到為資料提供分析、資料科學研究等價值

  • 1.4.2. 許多形式的儲存以某種方式貫穿了整個資料工程生命週期

1.5. 構成儲存系統的原材料,包括硬碟、固態硬碟和系統記憶體

  • 1.5.1. 序列化和壓縮,這是實用儲存的關鍵軟體元素

  • 1.5.2. 快取對儲存系統的組裝至關重要

1.6. 瞭解物理儲存技術的基本特徵,對於評估任何儲存架構中內在的權衡是至關重要的

1.7. 在實踐中,我們並不直接訪問系統記憶體或硬碟

  • 1.7.1. 物理儲存元件存在於伺服器和叢集內,這些伺服器和叢集可以使用各種訪問模式獲取和檢索資料

  • 1.7.2. 儲存系統被組裝成一個雲資料倉儲,一個資料湖等

2. 資料儲存的原材料

2.1. 在大多數資料架構中,資料在透過資料管道的各個處理階段時,經常會經過磁性儲存、SSD和記憶體

  • 2.1.1. 管理服務有可能將資料工程師從管理伺服器的複雜性中解放出來,但資料工程師仍然需要了解底層元件的基本特徵、效能考量、耐久性和成本

2.2. 磁碟驅動器

  • 2.2.1. 磁碟是塗有鐵磁薄膜的旋轉碟片

  • 2.2.1.1. 薄膜在寫操作中被讀/寫頭磁化,對二進位制資料進行物理編碼

  • 2.2.1.2. 讀/寫頭在讀操作中檢測磁場並輸出位元流

  • 2.2.1.3. 熱助磁記錄(Heat-Assisted Magnetic Recording,HAMR)、疊瓦式磁記錄(Shingled Magnetic Recording,SMR)和充氦磁碟儲存器等方法被用來實現越來越大的儲存密度

>  2.2.1.3.1. 硬碟效能的其他方面卻受到了物理學的阻礙
  • 2.2.2. 磁碟驅動器已經存在了很長時間

  • 2.2.2.1. 仍然是大容量資料儲存系統的骨幹

  • 2.2.2.2. 磁碟在效能、儲存密度和成本方面已經有了非凡的改進

  • 2.2.3. 它們每千兆位元組的儲存資料的成本遠低於固態硬碟

  • 2.2.3.1. 固態硬碟在各種指標上都大大超過了磁碟

  • 2.2.3.2. 商用磁碟驅動器的成本約為每千兆位元組3美分

  • 2.2.4. 主要限制

  • 2.2.4.1. 磁碟傳輸速度,即資料的讀寫速度,與磁碟容量不成正比

>  2.2.4.1.1. 磁碟容量與面積密度(每平方英寸1:儲存的千兆位)成比例,而傳輸速度與線性密度(每英寸的位元數)成比例

>  2.2.4.1.2. 如果磁碟容量增加4倍,傳輸速度只增加2倍

>  2.2.4.1.3. 假設傳輸速度為300MB/s,讀取一個30TB的磁碟的全部內容需要20多個小時
  • 2.2.4.2. 檢索時間
>  2.2.4.2.1. 了訪問資料,硬碟必須將讀/寫頭物理性地重新定位到磁碟上的適當軌道
  • 2.2.4.3. 旋轉延遲
>  2.2.4.3.1. 為了在磁碟上找到一個特定的資料,磁碟控制器必須等待該資料在讀/寫頭下旋轉
  • 2.2.4.4. 每秒輸入/輸出操作(Input/Output Operations Per Second,IOPS)
>  2.2.4.4.1. 對交易型資料庫至關重

>  2.2.4.4.2. 一個磁驅動器的IOPS在50~500之間
  • 2.2.5. 各種技巧可以改善延遲和提升傳輸速度

  • 2.2.5.1. 使用更高的旋轉速度可以提高傳輸速度,減少旋轉延遲

  • 2.2.5.2. 限制磁碟盤面的半徑或只將資料寫入磁碟上的一個窄帶,可以減少檢索時間

  • 2.2.5.3. 磁驅動器可以透過並行方式維持極高的傳輸速度

  • 2.2.5.4. 都不能使磁驅動器在隨機訪問查詢方面與固態硬碟有競爭力

  • 2.2.6. 磁碟因其低資料儲存成本而在資料中心中仍然受到重視

  • 2.2.6.1. 磁碟上的物件儲存已經成為資料湖和雲資料倉儲中大規模資料儲存的主要選擇

  • 2.2.7. 雲物件儲存背後的關鍵理念:資料可以分佈在叢集中的數千個磁碟上

  • 2.2.7.1. 透過同時從眾多磁碟中讀取資料,資料傳輸率大幅提高,這時讀取速度主要受限於網路效能而不是磁碟傳輸率

2.3. 固態硬碟

  • 2.3.1. 固態硬碟將資料作為電荷儲存在快閃記憶體單元中

  • 2.3.1.1. 固態硬碟不需要磁碟的機械部件,資料是透過純粹的電子手段讀取的

  • 2.3.1.2. 固態硬碟可以在不到0.1毫秒(100微秒)的時間內查詢到隨機資料

  • 2.3.2. 固態硬碟可以透過將儲存切成具有眾多並行執行的儲存控制器的分割槽來擴充套件資料傳輸速度和IOPS

  • 2.3.2.1. 商用固態硬碟可以支援每秒數千兆位元組的傳輸速度和數以萬計的IOPS

  • 2.3.3. 固態硬碟可以以更低的延遲、更高的IOPS和更高的傳輸速度提供資料,部分原因是固態硬碟沒有物理旋轉的磁碟或磁頭需要等待

  • 2.3.4. 固態硬碟已經徹底改變了事務資料庫,成為OLTP系統商業部署的公認標準

  • 2.3.4.1. 固態硬碟支援關聯式資料庫(如PostgreSQL、MySQL和SQL Server)每秒處理成千上萬的交易

  • 2.3.5. 固態硬碟目前並不是大規模分析資料儲存的預設選項

  • 2.3.5.1. 商用固態硬碟每千兆位元組容量的成本通常為20~30美分(USD),幾乎是磁碟每容量成本的10倍

  • 2.3.6. SSD在OLAP系統中仍然發揮著重要作用

  • 2.3.6.1. OLAP資料庫利用SSD快取來支援對頻繁訪問資料的高效能查詢

2.4. 隨機存取儲存器

  • 2.4.1. 隨機存取儲存器(Random Access Memory,RAM)

  • 2.4.1.1. 附屬於CPU,並對映到CPU的地址空間

  • 2.4.1.2. 儲存CPU執行的程式碼和該程式碼直接處理的資料

  • 2.4.1.3. 是易失性儲存器,而磁碟和SSD是非易失性儲存器

  • 2.4.1.4. 傳輸速度和檢索時間明顯優於SSD儲存

>  2.4.1.4.1. DDR5記憶體提供了100ns的資料檢索延遲,大約比SSD快1000倍

>  2.4.1.4.2. 一個典型的CPU可以支援100GB/s的頻寬到附加記憶體和數百萬的IOPS
  • 2.4.1.5. 比固態硬碟儲存貴得多,大約為10美元/GB

  • 2.4.1.6. 接到單個CPU和記憶體控制器的RAM數量上是有限的

>  2.4.1.6.1. 高記憶體伺服器通常在一塊板上使用許多相互連線的CPU,每個CPU都有一個連線的RAM塊
  • 2.4.1.7. 仍然比CPU快取慢得多,CPU快取是一種直接位於CPU晶片上或同一封裝中的儲存器

  • 2.4.2. 動態RAM,一種高密度、低成本的記憶體形式

  • 2.4.2.1. 動態RAM將資料作為電荷儲存在電容器中

  • 2.4.3. 硬體記憶體控制器處理這些技術細節,而資料工程師只需要擔心頻寬和檢索延遲的特性

  • 2.4.4. CPU幾乎都是採用馮·諾依曼體系結構,程式碼和資料儲存在同一個記憶體空間

  • 2.4.4.1. CPU通常也可以設定禁止在特定記憶體頁中執行程式碼,以增強安全性

  • 2.4.5. RAM被用於各種儲存和處理系統,可以用於快取、資料處理或索引

  • 2.4.5.1. 一些資料庫將RAM作為主要儲存層,允許超快的讀寫效能

  • 2.4.5.2. 始終牢記RAM的易失性

>  2.4.5.2.1. 即使儲存在記憶體中的資料是在叢集中複製的,導致幾個節點癱瘓的停電也會導致資料丟失

>  2.4.5.2.2. 想要持久儲存資料的架構可能需要電池備份,並在停電時自動將所有資料轉儲到磁碟

2.5. 網路和CPU

  • 2.5.1. 網路和CPU也是儲存系統的關鍵原材料

  • 2.5.2. 越來越多的儲存系統為了提高效能、耐久性和可用性採用分散式

  • 2.5.2.1. 單個磁性磁碟提供了相對較低的傳輸效能,但一個磁碟叢集可以並行讀取,可以實現顯著的效能擴充套件

  • 2.5.2.2. 獨立磁碟冗餘陣列(Redundant Arrays of Independent Disk,RAID)等儲存標準在單個伺服器上實現了並行化,但云物件儲存叢集的執行規模要大得多,磁碟分佈在一個網路甚至多個資料中心和可用區

  • 2.5.3. 可用區是一種標準的雲結構,由具有獨立電力、水和其他資源的計算環境組成

  • 2.5.3.1. 多區儲存增強了資料的可用性和耐久性

  • 2.5.4. 儲存成為一個具有API、後端服務元件和負載平衡的網路應用

  • 2.5.5. CPU處理服務請求、聚合讀取和分配寫入的細節

  • 2.5.6. 網路裝置效能和網路拓撲結構是實現高效能的關鍵因素

  • 2.5.6.1. 透過在地理上分散資料實現的耐用性和可用性

  • 2.5.6.2. 將儲存保持在一個小的地理區域和靠近資料消費者或寫入者的效能和成本優勢

2.6. 序列化

  • 2.6.1. 序列化是另一個原材料,也是資料庫設計的一個關鍵因素

  • 2.6.2. 過軟體儲存在系統記憶體中的資料通常不是適合儲存在磁碟或透過網路傳輸的格式

  • 2.6.3. 序列化是將資料扁平化並打包成一個讀取者能夠解碼的標準格式的過程

  • 2.6.3.1. 序列化格式提供了一個資料交換的標準

  • 2.6.3.2. 會以基於行的方式將資料編碼為XML、JSON或CSV檔案,然後將其傳遞給另一個使用者,後者可以使用一個標準對其進行解碼

  • 2.6.4. 一個序列化演算法有處理型別的邏輯,對資料結構施加規則,並允許資料在程式語言和CPU之間流通

  • 2.6.4.1. 序列化演算法也有處理異常的規則

  • 2.6.5. 低階別的資料庫儲存也是一種序列化的形式

  • 2.6.5.1. 面向行的關聯式資料庫將資料組織成磁碟上的行,以支援快速查詢和就地更新

  • 2.6.5.2. 列式資料庫將資料組織成列檔案,以最佳化高效壓縮並支援對大資料量的快速掃描

  • 2.6.6. 當前最流行的格式(如Apache Parquet)​、混合序列化(如Apache Hudi)和記憶體序列化(如Apache Arrow)​

2.7. 壓縮

  • 2.7.1. 壓縮是儲存工程的另一個重要組成部分

  • 2.7.1.1. 壓縮使資料變小,另外壓縮演算法也與儲存系統的其他細節複雜地相互影響

  • 2.7.2. 高效的壓縮在儲存系統中有三個主要優勢

  • 2.7.2.1. 資料更小,因此在磁碟上佔用的空間更少

  • 2.7.2.2. 壓縮增加了每個磁碟的實際掃描速度

>  2.7.2.2.1. 在10:1的壓縮比下,我們從每塊磁碟200MB/s的掃描速度變成了每塊磁碟2GB/s的高效掃描速度
  • 2.7.2.3. 在網路效能方面,鑑於亞馬遜EC2例項和S3之間的網路連線提供10GB/s的頻寬,10:1的壓縮比將有效的網路頻寬增加到100GB/s

  • 2.7.3. 缺點

  • 2.7.3.1. 壓縮和解壓縮資料需要額外的時間和資源消耗來讀取或寫入資料

2.8. 快取

  • 2.8.1. 快取的核心思想是將經常或最近訪問的資料儲存在一個快速訪問層

  • 2.8.2. 快取的速度越快,成本越高,可用的儲存空間越少

  • 2.8.2.1. 不太頻繁訪問的資料則儲存在更便宜、更慢的儲存中

  • 2.8.2.2. 由具有不同效能特徵的儲存所組成

  • 2.8.3. 快取對於資料服務、處理和轉換至關重要

  • 2.8.4. 歸檔儲存看作是一種反向的快取

  • 2.8.4.1. 歸檔儲存以較低的成本提供了較差的訪問特性

  • 2.8.4.2. 歸檔儲存一般用於資料備份和滿足資料保留的合規性要求

  • 2.8.4.3. 資料只有在緊急情況下才會被訪問

相關文章