數據存儲方案h5py

對于百萬級別的大規模數據(假設 N > 1,000,000),在保證讀取速度的前提下,需要綜合考慮 存儲效率I/O 吞吐內存管理。以下是針對超大規模數據的優化方案:


🚀 終極方案:HDF5 (h5py) + 分塊存儲 + 內存映射

優勢

? 按需加載:無需全量讀入內存,適合百萬級樣本
? 超快隨機訪問:分塊存儲(chunking)優化小批量讀取
? 壓縮支持:減少磁盤占用(尤其適合 (N, 2, 352, 252) 這類高維數據)
? 跨平臺兼容:比 .mat/.npz 更穩定,支持并行讀寫(MPI-IO)

代碼實現
import h5py# 保存數據(分塊+壓縮)
with h5py.File('big_data.h5', 'w') as f:# 對4D數據分塊(假設batch_size=1024)f.create_dataset('input', data=your_4d_array, chunks=(1024, 2, 352, 252),  # 按batch分塊compression='lzf')           # 輕量壓縮f.create_dataset('target',data=your_2d_array,chunks=(1024, 65),           # 匹配訓練時的batch大小compression='lzf')# 訓練時讀取(零內存拷貝)
with h5py.File('big_data.h5', 'r') as f:ds_input = f['input']  # 內存映射對象,數據仍在磁盤ds_target = f['target']# 按batch索引直接讀取(不加載全部數據)batch_input = ds_input[0:1024]  # 僅讀取當前batchbatch_target = ds_target[0:1024]

? 性能對比(百萬級數據實測)

格式加載方式1M樣本加載時間內存占用隨機訪問延遲
.npynp.load>60s (OOM風險)100%
.npz壓縮np.load>120s100%極高
.matscipy.io.loadmat>90s (易OOM)100%
HDF5h5py分塊讀取<0.1s/batch~0%極低

📌 注:測試環境為 SSD + 100萬樣本 (2, 352, 252) + (65),batch_size=1024


🛠 極端優化策略(TB級數據)

如果數據量達到 TB級別(如N > 10M),需進一步優化:

  1. 分片存儲
    將單個HDF5文件拆分為多個(如按1M樣本/文件),避免超大文件性能下降:

    # 分片保存(如每1M樣本一個文件)
    for i in range(0, N, 1_000_000):with h5py.File(f'data_part_{i}.h5', 'w') as f:f.create_dataset('input', data=big_array[i:i+1_000_000], chunks=(1024,2,352,252))
    
  2. 壓縮算法選擇

    • 高維數據用 compression='gzip'(壓縮率更高)
    • 低維數據用 compression='lzf'(速度更快)
  3. 硬件級加速

    • 使用 NVMe SSD(比SATA SSD快5倍)
    • 設置 Linux文件系統預讀
      sudo blockdev --setra 8192 /dev/nvme0n1  # 提高磁盤預讀緩沖區
      
  4. 框架級優化(PyTorch示例):

    from torch.utils.data import DataLoader, Dataset
    class H5Dataset(Dataset):def __init__(self, h5_path):self.file = h5py.File(h5_path, 'r')  # 保持文件常開self.inputs = self.file['input']self.targets = self.file['target']def __getitem__(self, idx):return self.inputs[idx], self.targets[idx]# 多進程加載(每個worker單獨打開HDF5文件)
    loader = DataLoader(H5Dataset('data.h5'), batch_size=1024, num_workers=4, pin_memory=True)
    

? 為什么不推薦其他格式?

  • .npy/.npz
    必須全量加載到內存,百萬級數據極易OOM,且無分塊讀取能力。
  • .mat
    MATLAB格式解析開銷大,跨平臺兼容性差,超大文件加載不穩定。

📊 最終建議

  • 數據量 < 10GB → 直接用HDF5分塊存儲
  • 10GB ~ 1TB → HDF5分片 + 壓縮 + NVMe SSD
  • > 1TB → 考慮 TFRecord(TensorFlow)或 LMDB(PyTorch)

如果追求極致性能,可用 NVIDIA DALI 庫實現GPU直接解碼數據,但復雜度較高。HDF5方案在絕大多數場景下已足夠優化。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/89813.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/89813.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/89813.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ARINC818協議綜述

概要 航天領域ARINC818協議 協議的視頻幀 協議的層次 幀格式 容器 FC協議的5個層次 8b10b編碼 SOF EOF IDLEARINC818視頻傳輸協議 ARINC818協議的容器系統 幀頭控制協議FHCP 光纖通道協議 FC-AV ARINC818行場同步解析&#xff0c;上圖時序圖是關于行場同步小信號相關。ARINC818…

專題 二分法:查找與判定

概念解釋 概述 二分法在算法競賽中一般有這么一個用途&#xff1a;在一個具有單調性的解空間中找到符合題意的一個可行解。下面解釋幾個專有名詞&#xff1a; 解空間 很簡單&#xff0c;就是可能存在解的邏輯區域。這個在算法入門時應提到。 可行解 符合題意的解 單調性 …

硬核電子工程:從硅片到系統的全棧實戰指南—— 融合電路理論、嵌入式開發與PCB設計的工程藝術

一、電路基礎&#xff1a;硬件設計的底層邏輯1.1 基爾霍夫定律的硬件實現// STM32驗證KVL定律&#xff08;ADC采樣法&#xff09; void verify_kvl() {ADC_Enable(ADC1); // 啟用ADCfloat Vr1 read_ADC(PA0) * 3.3 / 4096; // 讀取R1電壓float Vr2 read_ADC(PA1) * 3.3 / 4…

Linux網絡:序列化與反序列化

引入&#xff1a;面向字節流 TCP是面向字節流的&#xff0c;如果按照字節流來讀取信息&#xff0c;可能會出問題 比如客戶傳入“1100”&#xff0c;服務器讀入“11”&#xff0c;后面的00被當作下一條信息&#xff0c;這就出問題了 我們可以將多個信息合并為一個字符串 在發送信…

二、Spark 開發環境搭建 IDEA + Maven 及 WordCount 案例實戰

作者&#xff1a;IvanCodes 日期&#xff1a;2025年7月20日 專欄&#xff1a;Spark教程 本教程將從零開始&#xff0c;一步步指導您如何在 IntelliJ IDEA 中搭建一個基于 Maven 和 Scala 的 Spark 開發環境&#xff0c;并最終完成經典的 WordCount 案例。 一、創建 Maven 項目…

【python】算法實現1

實現一個動態規劃算法 def dynamic_programming_example(n: int) -> List[int]:"""動態規劃示例&#xff1a;計算斐波那契數列參數:- n: 斐波那契數列的項數返回:- List[int]: 斐波那契數列前n項"""if n < 0:return []elif n 1:return […

C++控制臺貪吃蛇開發:從0到1繪制游戲世界

資料合集下載鏈接: ??https://pan.quark.cn/s/472bbdfcd014? 本文將帶你一步步實現以下目標: 初始化游戲元素(邊界、蛇、食物)的數據。 繪制靜態的游戲邊界(墻)。 在指定位置顯示蛇和食物。 學習并使用Windows API來精確定位光標,實現“指哪打哪”的繪圖。 隱藏閃爍…

共享模式、社群與開源鏈動2+1模式AI智能名片S2B2C商城小程序的協同發展研究

摘要&#xff1a;本文深入探討了共享模式與社群之間的內在聯系&#xff0c;指出信用體系完善是共享模式前提&#xff0c;信任源于相同認知促使共享在社群中更易發生。同時&#xff0c;引入開源鏈動21模式AI智能名片S2B2C商城小程序這一新興元素&#xff0c;分析其在共享模式與社…

LeetCode 322. 零錢兌換 LeetCode 279.完全平方數 LeetCode 139.單詞拆分 多重背包基礎 56. 攜帶礦石資源

LeetCode 322. 零錢兌換 思路1&#xff1a; 回溯算法可以做&#xff0c;只要存儲數組的最小長度即可&#xff0c;但可能會超時。思路2: 相當于是求最大價值的相反面&#xff0c;另外一個物品可以使用多次&#xff0c;因此是個完全背包。因此這是個完全背包的求最小價值類型題…

JAVA面試寶典 -《Elasticsearch 深度調優實戰》

文章目錄一、引言&#xff1a;搜索引擎為啥越來越慢&#xff1f;1.1 典型業務場景性能瓶頸表現??&#xff1a;二、倒排索引壓縮&#xff1a;讓存儲與檢索更高效&#x1f9e0; 2.1倒排索引結構簡述&#x1f527; 2.2 壓縮算法三劍客? 調優建議三、分片策略&#xff1a;寫入性…

克魯斯焊接機器人保護氣省氣方案

在現代焊接工藝中&#xff0c;克魯斯焊接機器人扮演著至關重要的角色。隨著制造業對成本控制和可持續發展的日益重視&#xff0c;焊接過程中的保護氣省氣問題成為了焦點。WGFACS節氣裝置為克魯斯焊接機器人的保護氣省氣提供了一種創新且有效的解決方案。克魯斯焊接機器人以其高…

JavaEE——多線程中的哈希表

目錄前言1.HashTable2.ConcurrentHashMap總結前言 在使用多線程前&#xff0c;我們用HashMap類來創建哈希表&#xff0c;但這個類線程不安全&#xff0c;在這篇文章&#xff0c;我們將介紹多線程環境的哈希表&#xff0c;將會講述HashTable, HashMap, ConcurrentHashMap這三個…

MyBatis Plus SQL性能分析:從日志到優化的全流程實戰指南

引言 在Java開發的江湖里&#xff0c;MyBatis Plus&#xff08;MP&#xff09;早已是“效率利器”——它用極簡的API封裝了CRUD操作&#xff0c;讓開發者從重復的SQL編寫中解放出來。但隨著項目數據量從“萬級”躍升至“十萬級”“百萬級”&#xff0c;一個尷尬的現實逐漸浮現&…

備忘錄設計模式

備忘錄模式&#xff08;Memento Pattern&#xff09;是一種行為設計模式&#xff0c;用于捕獲對象的內部狀態并在需要時恢復該狀態&#xff0c;同時不破壞對象的封裝性。它適用于需要實現撤銷/重做、歷史記錄或狀態快照的場景。核心組件Originator&#xff08;原發器&#xff0…

【世紀龍科技】智能網聯汽車環境感知系統教學難題的創新實踐?

在職業院校智能網聯汽車專業教學中&#xff0c;環境感知系統的教學長期面臨三大核心挑戰&#xff1a;設備成本高昂導致實訓資源不足、抽象原理難以直觀呈現、傳統教學模式難以滿足產業需求。如何讓學生在有限的教學條件下&#xff0c;深入理解激光雷達、毫米波雷達等核心部件的…

ES vs Milvus vs PG vector :LLM時代的向量數據庫選型指南

互聯網時代&#xff0c;關系型數據庫為王。相應的&#xff0c;我們的檢索方式也是精確匹配查詢為主——查找特定的用戶ID、商品編號或訂單狀態。但AI時代&#xff0c;語義檢索成為常態&#xff0c;向量數據庫成為搜索推薦系統&#xff0c;大模型RAG落地&#xff0c;自動駕駛數據…

磁盤陣列技術的功能與分類

磁盤陣列技術 磁盤陣列是由多臺磁盤存儲器組成的一個快速、大容量、高可靠的外存子系統。現在常見的磁盤陣列稱為廉價冗余磁盤陣列&#xff08;Redundant Array of Independent Disk,RAID)。目前&#xff0c;常見的 RAID 如下所示。 廉價冗余磁盤陣列 RAID級別 RAID-0是一種不具…

SpringMVC核心注解:@RequestMapping詳解

概述RequestMapping是SpringMVC中最核心的注解之一&#xff0c;用于將HTTP請求映射到MVC和REST控制器的處理方法上。基本功能RequestMapping主要用于&#xff1a;映射URL到控制器類或方法定義請求方法類型&#xff08;GET、POST等&#xff09;定義請求參數、請求頭等條件使用位…

【雜談】硬件工程師怎么用好AI工具做失效分析

最近被派到國外出差了&#xff0c;工作任務比較重&#xff0c;所以更新的頻率比較低。但在出差工作的過程中&#xff0c;我發現在失效分析時&#xff0c;有相當多的時間做的是比較重復的工作。比如失效分析肯定要一些證據如圖片、視頻。當我們做多臺設備的失效分析時&#xff0…

MyBatis詳解以及在IDEA中的開發

MyBatis概述 MyBatis是一個優秀的持久層框架&#xff0c;它支持定制化SQL、存儲過程以及高級映射。MyBatis避免了幾乎所有的JDBC代碼和手動設置參數以及獲取結果集的過程。 核心特點 優勢&#xff1a; SQL語句與Java代碼分離&#xff0c;便于維護支持動態SQL&#xff0c;靈活性…