{"id":810,"date":"2026-07-30T12:22:34","date_gmt":"2026-07-30T12:22:34","guid":{"rendered":"https:\/\/matforge.org\/?p=810","raw":"https:\/\/matforge.org\/?p=810"},"modified":"2026-07-30T12:22:34","modified_gmt":"2026-07-30T12:22:34","slug":"hdf5-for-simulation-data-parallel-io-long-term-storage","status":"publish","type":"post","link":"https:\/\/matforge.org\/de\/hdf5-for-simulation-data-parallel-io-long-term-storage\/","title":{"rendered":"HDF5 f\u00fcr Simulationsdaten: Parallele E\/A und Langzeitspeicherung","raw":"HDF5 f\u00fcr Simulationsdaten: Parallele E\/A und Langzeitspeicherung"},"content":{"rendered":"<span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Reading Time: <\/span> <span class=\"rt-time\"> 10<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span><p>HDF5 ist der De-facto-Standard f\u00fcr die Speicherung von wissenschaftlichen Simulationsdaten im gro\u00dfen Ma\u00dfstab. Seine hierarchische Struktur, die parallelen E\/A-Funktionen \u00fcber MPI und die integrierte Komprimierung machen es ideal f\u00fcr Hochleistungs-Computing-Umgebungen. Eine unsachgem\u00e4\u00dfe Verwendung &#8211; insbesondere schlechte Chunking-Optionen und falsche parallele Zugriffsmuster &#8211; kann jedoch zu starker Leistungsminderung oder Datenbesch\u00e4digung f\u00fchren. Dieser Leitfaden behandelt die HDF5-Architektur, die parallele I\/O-Implementierung in Python, Techniken zur Leistungsoptimierung und Best Practices f\u00fcr die Aufbewahrung f\u00fcr die langfristige Speicherung.<\/p>\n<h2>Einleitung: Die Simulationsdaten-Herausforderung<\/h2>\n<p>Wissenschaftliche Simulationen generieren routinem\u00e4\u00dfig Terabyte Daten \u00fcber Tausende von Zeitschritten und mehrere physikalische Felder. Die Verwaltung dieser Sintflut erfordert mehr als nur ein Dateiformat &#8211; es erfordert ein System, das verarbeiten kann:<\/p>\n<ul>\n<li><strong>Scale<\/strong>: Gigabyte bis Petabyte von mehrdimensionalen Arrays<\/li>\n<li><strong>Leistung<\/strong>: Effizientes Lesen\/Schreiben auf HPC-Systemen mit parallelen Dateisystemen<\/li>\n<li><strong>Organisation<\/strong>: Selbstbeschreibende Strukturen, die Jahre sp\u00e4ter verst\u00e4ndlich bleiben<\/li>\n<li><strong>Haltbarkeit<\/strong>: Langzeitkonservierung ohne Formatveralterung<\/li>\n<li><strong>Access<\/strong>: Schnelle Untereinstellung ohne vollst\u00e4ndige Datens\u00e4tze zu lesen<\/li>\n<\/ul>\n<p>HDF5 (Hierarchical Data Format Version 5) behebt diese Herausforderungen durch eine Kombination aus flexibler Datenmodellierung, paralleler E\/A-Unterst\u00fctzung und Metadatenintegration. Von der NASA, der NASA, den DOE-Labors und den Forschungseinrichtungen weit verbreitet, ist HDF5 zum R\u00fcckgrat wissenschaftlicher Datenarchive weltweit geworden[^1][^2].<\/p>\n<h2>Was ist HDF5? Architektur und Kernkonzepte<\/h2>\n<p>HDF5 ist sowohl ein <strong>Dateiformat<\/strong> als auch eine <strong>Softwarebibliothek<\/strong>, die einen Container f\u00fcr heterogene wissenschaftliche Daten bereitstellt. Seine Architektur basiert auf sechs grundlegenden Einheiten[^3]:<\/p>\n<ol>\n<li><strong>Gruppe<\/strong>: Containerobjekte analog zu Verzeichnissen, hierarchisch organisieren<\/li>\n<li><strong>Dataset<\/strong>: Mehrdimensionale Arrays mit tats\u00e4chlichen numerischen oder strukturierten Daten<\/li>\n<li><strong>Dataspace<\/strong>: Beschreibt die Datensatzdimensionen (Form, Rang und Ausma\u00df)<\/li>\n<li><strong>DataType<\/strong>: Gibt Elementtypen an (Ganzzahl, Floats, Strings, Compounds)<\/li>\n<li><strong>Attribut<\/strong>: Kleine Metadaten an Gruppen oder Datens\u00e4tze<\/li>\n<li><strong>link<\/strong>: Verbindet Objekte innerhalb der Hierarchie (Hard- und Softlinks)<\/li>\n<\/ol>\n<h3>Die hierarchische Struktur<\/h3>\n<p>Eine HDF5-Datei ist ein gerichteter Graph mit einer einzelnen Wurzelgruppe (<code>\/<\/code>). Gruppen k\u00f6nnen andere Gruppen und Datasets enthalten, die beliebig tiefe Verschachtelung erm\u00f6glichen. Diese Struktur spiegelt ein Dateisystem wider, aber mit wesentlichen Unterschieden:<\/p>\n<ul>\n<li><strong>Selbstbeschreibung<\/strong>: Alle Metadaten (Datentypen, Dimensionen) reisen mit den Daten<\/li>\n<li><strong>Portable<\/strong>: Plattformunabh\u00e4ngiges Bin\u00e4rformat<\/li>\n<li><strong>Extensible<\/strong>: Datens\u00e4tze k\u00f6nnen in der Gr\u00f6\u00dfe ge\u00e4ndert und Gruppen\/Datasets dynamisch hinzugef\u00fcgt werden<\/li>\n<li><strong>Komprimiert<\/strong>: Chunk-basierte Speicherung erm\u00f6glicht Komprimierungsfilter pro Chunk<\/li>\n<\/ul>\n<pre><code>\/simulation\n\u251c\u2500\u2500 metadata\n\u2502   \u251c\u2500\u2500 title (attribute)\n\u2502   \u251c\u2500\u2500 creation_date (attribute)\n\u2502   \u2514\u2500\u2500 parameters (group)\n\u2502       \u251c\u2500\u2500 mesh_size (dataset)\n\u2502       \u2514\u2500\u2500 time_step (dataset)\n\u251c\u2500\u2500 fields\n\u2502   \u251c\u2500\u2500 temperature (dataset, 3D [x,y,z,time])\n\u2502   \u251c\u2500\u2500 velocity (dataset, 4D [x,y,z,time,component])\n\u2502   \u2514\u2500\u2500 pressure (dataset, 3D)\n\u2514\u2500\u2500 output\n    \u251c\u2500\u2500 checkpoint_001.h5 (external link)\n    \u2514\u2500\u2500 checkpoint_002.h5 (external link)\n<\/code><\/pre>\n<h2>Warum HDF5 f\u00fcr wissenschaftliche Simulation?<\/h2>\n<p>Im Vergleich zu einfachen Textformaten (CSV, JSON) oder einfacheren Bin\u00e4rformaten bietet HDF5 kritische Vorteile:<\/p>\n<ul>\n<li><strong>Partial I\/O<\/strong>: Nur notwendige Teilmengen lesen, ohne ganze Datens\u00e4tze zu laden<\/li>\n<li><strong>Kompression<\/strong>: Verlustfreie Komprimierung (gzip, szip, lzf) reduziert die Speicherung um 2\u201310\u00d7<\/li>\n<li><strong>Parallel Access<\/strong>: Mehrere Prozesse k\u00f6nnen \u00fcber MPI-IO gleichzeitig lesen\/schreiben<\/li>\n<li><strong>Metadatenreichtum<\/strong>: Attribute Dokumenteinheiten, Beschreibungen und Provenienz<\/li>\n<li><strong>Gro\u00dfe Dateiunterst\u00fctzung<\/strong>: Behandelt Dateien mit mehr als 2 GB (im Gegensatz zu \u00e4lteren HDF4)<\/li>\n<li><strong>Cross-Plattform<\/strong>: Funktioniert unter Linux, macOS, Windows; Unterst\u00fctzt in Python, C, C++, FORTRAN, MATLAB, R<\/li>\n<\/ul>\n<p>Bei Simulations-Workflows \u2013 bei denen Checkpoint-Dateien, Zeitreihenausgaben und Netzdaten \u00fcber Jahre bestehen m\u00fcssen \u2013 sind diese Funktionen nicht optional; Sie sind essentiell.<\/p>\n<h2>Grundlegendes zur HDF5-Datenorganisation<\/h2>\n<h3>Gruppen und Datens\u00e4tze: Die Bausteine<\/h3>\n<p><strong>Gruppen<\/strong> bieten Namespaces und logische Organisation. Jede Datei hat eine Root-Gruppe (<code>\/<\/code>) und Sie k\u00f6nnen verschachtelte Gruppen beliebig erstellen. Gruppen selbst speichern keine Daten; Sie enthalten Links zu Datasets und anderen Gruppen.<\/p>\n<p><strong>Datasets<\/strong> sind dort, wo Ihre Simulationsergebnisse leben. Ein Dataset ist ein mehrdimensionales Array mit festen oder erweiterbaren Dimensionen. Gemeinsame Muster f\u00fcr Simulationsdaten:<\/p>\n<ul>\n<li><strong>3D-Felder<\/strong>: <code>(nx, ny, nz)<\/code> Arrays f\u00fcr r\u00e4umliche Variablen<\/li>\n<li><strong>4D-Zeitreihen<\/strong>: <code>(nx, ny, nz, nt)<\/code> Arrays mit der vierten Dimension<\/li>\n<li><strong>2D-Schnitte<\/strong>: <code>(nx, nt)<\/code> f\u00fcr Liniensonden oder Sensordaten<\/li>\n<li><strong>Strukturierte Daten<\/strong>: Zusammengesetzte Datentypen f\u00fcr Partikeleigenschaften (Position, Geschwindigkeit, Masse)<\/li>\n<\/ul>\n<h3>Datenbereiche: Gestalten Ihrer Daten<\/h3>\n<p>Ein Dataspace definiert das logische Layout eines Datasets. HDF5 unterst\u00fctzt:<\/p>\n<ul>\n<li><strong>Skalar<\/strong>: Einzelwert (0-D)<\/li>\n<li><strong>Simple<\/strong>: Regul\u00e4res N-dimensionales Array mit festen oder unbegrenzten Abmessungen<\/li>\n<li><strong>Komplex<\/strong>: Willk\u00fcrliche Auswahl mit Hyperslabs<\/li>\n<\/ul>\n<p><strong>Unbegrenzte Dimensionen<\/strong> (erweiterbare Achsen) sind entscheidend f\u00fcr Simulationsausgaben, bei denen die Anzahl der Zeitschritte vorher unbekannt ist.<\/p>\n<h3>Attribute: die selbst beschreibende Kraft<\/h3>\n<p>Attribute sind kleine Metadatenobjekte, die an Gruppen oder Datasets angeh\u00e4ngt sind. Sie sind <em>der prim\u00e4re Mechanismus<\/em> f\u00fcr die Dokumentation Ihrer Daten[^4]. Verwenden Sie Attribute zum Speichern:<\/p>\n<ul>\n<li>Physikalische Einheiten (<code>\"m\/s\"<\/code>, <code>\"K\"<\/code>, <code>\"Pa\"<\/code>)<\/li>\n<li>Beschreibung Zeichenfolgen<\/li>\n<li>Zeitstempel<\/li>\n<li>Simulationsparameter<\/li>\n<li>Zitierinformationen<\/li>\n<li>Softwareversion verwendet<\/li>\n<\/ul>\n<pre><code class=\"language-python\"># Example: Adding attributes with h5py\nimport h5py\n\nwith h5py.File('simulation.h5', 'w') as f:\n    grp = f.create_group('temperature')\n    dset = grp.create_dataset('field', data=temperature_array)\n    \n    dset.attrs['units'] = 'Kelvin'\n    dset.attrs['long_name'] = 'Temperature field'\n    dset.attrs['simulation_time'] = 1234.56\n<\/code><\/pre>\n<h2>Parallele E\/A mit HDF5<\/h2>\n<h3>Was ist paralleles HDF5?<\/h3>\n<p>Parallel HDF5 (PHDF5) erweitert die Standardbibliothek um MPI-IO-Unterst\u00fctzung, sodass mehrere Prozesse gleichzeitig auf dieselbe HDF5-Datei zugreifen k\u00f6nnen. Dies ist f\u00fcr gro\u00df angelegte Simulationen auf HPC-Clustern unerl\u00e4sslich, in denen der Rechenauftrag Hunderte oder Tausende von Kernen umfasst [^5].<\/p>\n<h3>Wie es funktioniert<\/h3>\n<p>Unter der Haube verwendet PHDF5 <strong> MPI-IO <\/strong> (das parallele E \/ A-Subsystem von MPI), um den Zugriff zu koordinieren. Beim \u00d6ffnen einer Datei im Parallelmodus teilen alle Prozesse im MPI Communicator denselben Dateihandle und Koordinatenlesen\/Schreiben.<\/p>\n<pre><code class=\"language-python\"># Parallel HDF5 example (requires h5py built with MPI support)\nfrom mpi4py import MPI\nimport h5py\n\ncomm = MPI.COMM_WORLD\nrank = comm.Get_rank()\nsize = comm.Get_size()\n\n# Each process opens the file collectively\nwith h5py.File('parallel_output.h5', 'w', driver='mpio', comm=comm) as f:\n    # Create a dataset distributed across all processes\n    # Each process writes its chunk of the global array\n    local_data = compute_local_chunk(rank, size)\n    dset = f.create_dataset('field', (global_nx, global_ny), dtype='f8')\n    # Write using hyperslabs\n    dset[local_slice] = local_data\n<\/code><\/pre>\n<h3>Kollektive vs. unabh\u00e4ngige E\/A<\/h3>\n<p>Eine kritische Leistungsunterscheidung in paralleler HDF5:<\/p>\n<ul>\n<li><strong>Collective I\/O<\/strong>: Alle Prozesse nehmen an derselben E\/A-Operation teil. Die MPI-Bibliothek kann Datenbewegung, Aggregation und Striping optimieren. <strong>Verwenden Sie dies wann immer m\u00f6glich<\/strong>.<\/li>\n<li><strong>Independent I\/O<\/strong>: Jeder Prozess \u00f6ffnet, liest und schreibt unabh\u00e4ngig. Dies f\u00fchrt zu einer schlechten Leistung aufgrund von Dateisystemkonflikten und verpassten Optimierungsm\u00f6glichkeiten[^6].<\/li>\n<\/ul>\n<p><strong>Best Practice<\/strong>: Strukturieren Sie Ihren Code so, dass alle Prozesse gleichzeitig <code>read()<\/code> oder <code>write()<\/code> mit kompatiblen HyperSlab-Auswahlen aufrufen. Vermeiden Sie bedingte E \/ A, die nur einige Prozesse ausf\u00fchren.<\/p>\n<h3>Parallele HDF5-Leistungstipps<\/h3>\n<ol>\n<li><strong>Aggregate Writes<\/strong>: Schreiben Sie in gro\u00dfen zusammenh\u00e4ngenden St\u00fccken, nicht in vielen kleinen St\u00fccken<\/li>\n<li><strong>Gesamtpufferung verwenden<\/strong>: Lassen Sie den MPI-Bibliotheks-Cache und Coalesce schreiben<\/li>\n<li><strong>St\u00fccke mit Prozesszerlegung ausrichten<\/strong>: Ordnen Sie den Datensatz-Chunking Ihrer Domain-Zerlegung zu<\/li>\n<li><strong>Vermeiden Sie Dateisystem-Thrashing<\/strong>: Verwenden Sie eine Datei pro Ausgabeschritt, nicht eine Datei pro Prozess<\/li>\n<li><strong>Geeignete Chunk-Cache-Gr\u00f6\u00dfe festlegen<\/strong>: Erh\u00f6hen Sie den Cache f\u00fcr h\u00e4ufig abgerufene Datasets<\/li>\n<\/ol>\n<h2>HDF5 mit Python: Die H5Py-Bibliothek<\/h2>\n<p>Das <a href=\"https:\/\/docs.h5py.org\/en\/latest\/\">h5py<\/a>-Paket bietet die pythonischste Schnittstelle zu HDF5[^7].<\/p>\n<h3>Grundlegende Operationen<\/h3>\n<pre><code class=\"language-python\">import h5py\nimport numpy as np\n\n# Writing data\nwith h5py.File('output.h5', 'w') as f:\n    # Create a dataset\n    data = np.random.randn(1000, 1000)\n    dset = f.create_dataset('temperature', data=data, compression='gzip')\n    \n    # Add attributes\n    dset.attrs['units'] = 'K'\n    dset.attrs['description'] = 'Temperature at final time step'\n    \n    # Create groups for organization\n    grp = f.create_group('initial_conditions')\n    grp.create_dataset('velocity', data=velocity_field)\n\n# Reading data\nwith h5py.File('output.h5', 'r') as f:\n    temp = f['temperature'][:]  # Load entire dataset\n    # Or read a slice\n    slice_ = f['temperature'][100:200, 300:400]\n    \n    # Access attributes\n    units = f['temperature'].attrs['units']\n<\/code><\/pre>\n<h3>Simulationsausgabe effizient schreiben<\/h3>\n<p>Verwenden Sie f\u00fcr zeitabh\u00e4ngige Simulationen <strong>Erweiterbare Datasets<\/strong> mit einer unbegrenzten Zeitdimension:<\/p>\n<pre><code class=\"language-python\">with h5py.File('time_series.h5', 'w') as f:\n    # Create dataset with unlimited maxshape\n    dset = f.create_dataset(\n        'temperature', \n        shape=(0, nx, ny), \n        maxshape=(None, nx, ny),  # Unlimited time dimension\n        dtype='f8',\n        chunks=(1, nx, ny)  # Chunk along time axis\n    )\n    \n    # Append each time step\n    for t in range(num_steps):\n        current_temp = simulate_step(t)\n        dset.resize((t+1, nx, ny))  # Extend dataset\n        dset[t, :, :] = current_temp\n<\/code><\/pre>\n<h3>Anh\u00e4ngen-Modus f\u00fcr Pr\u00fcfpunkte<\/h3>\n<p>Verwenden Sie den Append-Modus (<code>'a'<\/code>), um vorhandenen Dateien neue Ausgaben hinzuzuf\u00fcgen, ohne zu \u00fcberschreiben:<\/p>\n<pre><code class=\"language-python\">with h5py.File('run_001.h5', 'a') as f:\n    if 'checkpoint_002' not in f:\n        f.create_dataset('checkpoint_002', data=new_data)\n<\/code><\/pre>\n<h2>Leistungsoptimierung: Chunking und Komprimierung<\/h2>\n<h3>Chunking: Der Schl\u00fcssel zur Leistung<\/h3>\n<p>HDF5 speichert Datens\u00e4tze in <strong>Chunks<\/strong> \u2013 Hyper-Rechtecke mit fester Gr\u00f6\u00dfe, die die Einheit von E\/A und Komprimierung sind[^8]. Chunking ist <em>Erforderlich<\/em> f\u00fcr:<\/p>\n<ul>\n<li>Datensatzkomprimierung<\/li>\n<li>Erweiterbare Datens\u00e4tze<\/li>\n<li>Effiziente partielle Lese- \/ Schreibvorg\u00e4nge<\/li>\n<li>Parallele E \/ A<\/li>\n<\/ul>\n<p><strong>Chunk-Gr\u00f6\u00dfe wirkt sich dramatisch auf die Leistung aus<\/strong>:<\/p>\n<ul>\n<li><strong>Zu klein<\/strong>: \u00dcberm\u00e4\u00dfiger Metadaten-Overhead, schlechte Kompressionsverh\u00e4ltnisse, hoher Systemaufruf-Overhead<\/li>\n<li><strong>Zu gro\u00df<\/strong>: Das Lesen einer kleinen Teilmenge l\u00e4dt den gesamten Block in den Speicher und verschwendet die E\/A-Bandbreite<\/li>\n<\/ul>\n<p><strong>Faustregel<\/strong>: W\u00e4hlen Sie Bl\u00f6cke, die Ihrem typischen Zugriffsmuster entsprechen. F\u00fcr 3D-Zeitreihen, die plan-by-plane aufrufen, chunk als <code>(1, nx, ny)<\/code> oder <code>(nt, nx, 1)<\/code>, je nachdem, welche Dimension am schnellsten variiert.<\/p>\n<pre><code class=\"language-python\"># Optimal chunking for 3D time-series where we read full XY planes\ndset = f.create_dataset(\n    'field',\n    shape=(nt, nx, ny),\n    chunks=(1, nx, ny),  # Each time step is one chunk\n    compression='gzip'\n)\n\n# Reading one time step only decompresses one chunk\ntime_step_50 = dset[50, :, :]\n<\/code><\/pre>\n<h3>Komprimierung: Trade Storage f\u00fcr CPU<\/h3>\n<p>HDF5 unterst\u00fctzt mehrere verlustfreie Komprimierungsfilter:<\/p>\n<ul>\n<li><strong>Gzip<\/strong>: universell, gute Komprimierung (2\u20135 \u00d7), CPU-intensiv<\/li>\n<li><strong>szip<\/strong>: Schnell, hardwarebeschleunigt auf einigen Systemen, weniger portabel<\/li>\n<li><strong>LZF<\/strong>: Sehr schnelle, m\u00e4\u00dfige Kompression (2\u00d7)<\/li>\n<li><strong>Blosc<\/strong>: Hochleistungs-Multi-Thread (\u00fcber externe Bibliothek)<\/li>\n<\/ul>\n<p><strong>Wann komprimieren<\/strong>:<\/p>\n<ul>\n<li>Archivspeicher, bei dem die Gr\u00f6\u00dfe wichtiger ist als die Schreibgeschwindigkeit<\/li>\n<li>I\/O-gebundene Workloads, bei denen der Dekompressionsaufwand geringer ist als die Lesezeit der Festplatte<\/li>\n<li>Wenn Daten Redundanz aufweisen (glatte Felder, wiederholte Werte)<\/li>\n<\/ul>\n<p><strong>Wann Komprimierung vermeiden<\/strong>:<\/p>\n<ul>\n<li>Ultra-Hochleistungsschreibpfade (Checkpoint-Intervalle &lt; 1 Sekunde)<\/li>\n<li>Bereits komprimierte Daten (Bilder, Videos)<\/li>\n<li>Bei paralleler E\/A mit nicht \u00fcbereinstimmenden Chunk-Gr\u00f6\u00dfen<\/li>\n<\/ul>\n<pre><code class=\"language-python\"># Compression examples\ndset = f.create_dataset('data', data=data, compression='gzip', compression_opts=4)  # gzip level 4\ndset = f.create_dataset('data', data=data, compression='lzf')  # Fast LZF\n<\/code><\/pre>\n<h3>Cache-Konfiguration<\/h3>\n<p>Die HDF5-Bibliothek verwaltet zwei Caches:<\/p>\n<ul>\n<li><strong>Metadaten-Cache<\/strong>: Speichert Informationen zu Gruppen, Datasets, Attributen<\/li>\n<li><strong>Chunk-Cache<\/strong>: H\u00e4lt k\u00fcrzlich aufgerufene Datenbl\u00f6cke<\/li>\n<\/ul>\n<p>F\u00fcr leistungskritische Workloads stimmen Sie diese Caches \u00fcber <code>h5py<\/code> ab:<\/p>\n<pre><code class=\"language-python\">with h5py.File('file.h5', 'w', libver='latest') as f:\n    f.swmr_mode = True  # Enable Single-Writer-Multiple-Reader for concurrent access\n    \n# Configure chunk cache when opening\nwith h5py.File('file.h5', 'r', rdcc_nbytes=1024**3, rdcc_w0=0.75) as f:\n    # 1 GB chunk cache, 75% preemption policy\n    pass\n<\/code><\/pre>\n<h2>Best Practices f\u00fcr Datenorganisation<\/h2>\n<h3>Dateistrukturmuster<\/h3>\n<p><strong>single-file-per-run<\/strong>: Speichern Sie alle Ausgaben einer Simulation in einer einzigen HDF5-Datei mit einer klaren Gruppenhierarchie. Vorteile:<\/p>\n<ul>\n<li>Einzeltransfer- \/ Archiveinheit<\/li>\n<li>Atomische Updates (entweder alle Daten sind geschrieben oder keine)<\/li>\n<li>Einfachere Integrit\u00e4t zu validieren<\/li>\n<\/ul>\n<p><strong>Pr\u00fcfpunkte f\u00fcr mehrere Dateien<\/strong>: Separate Checkpoint-Dateien von der endg\u00fcltigen Ausgabe. Verwenden Sie Softlinks, um sie zu verbinden:<\/p>\n<pre><code>run_001.h5\n\u251c\u2500\u2500 \/initial (link to checkpoint_000.h5:\/data)\n\u251c\u2500\u2500 \/final\n\u2502   \u2514\u2500\u2500 field (dataset)\n\u2514\u2500\u2500 \/checkpoints (group)\n    \u251c\u2500\u2500 checkpoint_000.h5 (external link)\n    \u251c\u2500\u2500 checkpoint_001.h5 (external link)\n    \u2514\u2500\u2500 checkpoint_002.h5 (external link)\n<\/code><\/pre>\n<h3>Dokumentieren Sie alles mit Attributen<\/h3>\n<p>HDF5-Dateien k\u00f6nnen ohne gr\u00fcndliche Dokumentation undurchdringlich werden. <strong>Jeder Datensatz und jede Gruppe sollten beschreibende Attribute haben<\/strong>[^9]:<\/p>\n<pre><code class=\"language-python\">dset.attrs['units'] = 'm\/s'\ndset.attrs['long_name'] = 'Fluid velocity vector'\ndset.attrs['standard_name'] = 'velocity'\ndset.attrs['positive'] = 'up'  # For vertical components\ndset.attrs['grid_mapping'] = '\/mesh\/x_grid'  # Link to coordinate variables\ndset.attrs['comment'] = 'Computed using second-order upwind scheme'\ndset.attrs['software'] = 'FiPy 3.4'\ndset.attrs['git_commit'] = 'abc123def'\n<\/code><\/pre>\n<p>Erw\u00e4gen Sie die \u00dcbernahme der <strong> Klima- und Prognosekonventionen<\/strong> f\u00fcr geophysikalische Simulationen oder dom\u00e4nenspezifische Metadatenstandards, sofern verf\u00fcgbar.<\/p>\n<h3>Vermeiden Sie die Proliferation des Datensatzes<\/h3>\n<p>W\u00e4hrend HDF5 Millionen von Datens\u00e4tzen zul\u00e4sst, verschlechtert sich die Leistung mit \u00fcberm\u00e4\u00dfigen Zahlen[^10]. Bevorzugen:<\/p>\n<ul>\n<li>weniger gro\u00dfe Datens\u00e4tze \u00fcber viele kleine<\/li>\n<li>Zusammengesetzte Datentypen f\u00fcr verwandte Skalarfelder (z. B. Partikelposition + Geschwindigkeit + Masse)<\/li>\n<li>Gruppieren von \u00e4hnlichen kleinen Arrays in einem einzigen strukturierten Datensatz<\/li>\n<\/ul>\n<h3>Defragmentieren Sie gro\u00dfe Dateien<\/h3>\n<p>Mit der Zeit k\u00f6nnen HDF5-Dateien fragmentiert werden, wenn Datens\u00e4tze erstellt und gel\u00f6scht werden. Verwenden Sie <code>h5repack<\/code>, um Dateien optimal umzuschreiben:<\/p>\n<pre><code class=\"language-bash\">h5repack -f GZIP=4 input.h5 output_compressed.h5\nh5repack -l CHUNK=100x100x100 input.h5 rechunked.h5\n<\/code><\/pre>\n<h2>HDF5 vs. Alternativen: NetCDF4, ZARR, CSV<\/h2>\n<h3>Vergleichszusammenfassung<\/h3>\n<table>\n<thead>\n<tr>\n<th>Funktion<\/th>\n<th>HDF5<\/th>\n<th>netcdf-4<\/th>\n<th>ZARR<\/th>\n<th>CSV \/ JSON<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>Parallel I \/ O <\/strong><\/td>\n<td>\u2705 MPI-IO<\/td>\n<td>\u2705 MPI-IO<\/td>\n<td>\u2705 (Cloud-optimiert)<\/td>\n<td>\u274c<\/td>\n<\/tr>\n<tr>\n<td><strong>Kompression<\/strong><\/td>\n<td>Mehrere Filter<\/td>\n<td>gzip \/ szip<\/td>\n<td>Mehrere (BLOCK, GZIP)<\/td>\n<td>\u274c<\/td>\n<\/tr>\n<tr>\n<td><strong>Einzeldatei<\/strong><\/td>\n<td>\u2705<\/td>\n<td>\u2705<\/td>\n<td>\u274c (Verzeichnis)<\/td>\n<td>\u2705<\/td>\n<\/tr>\n<tr>\n<td><strong>Cloud-Native<\/strong><\/td>\n<td>\u26a0\ufe0f (mit HSDs)<\/td>\n<td>\u26a0\ufe0f<\/td>\n<td>\u2705<\/td>\n<td>\u2705<\/td>\n<\/tr>\n<tr>\n<td><strong>Python-First<\/strong><\/td>\n<td>\u26a0\ufe0f (h5py)<\/td>\n<td>\u2705 (netcdf4)<\/td>\n<td>\u2705<\/td>\n<td>\u2705<\/td>\n<\/tr>\n<tr>\n<td><strong>Metadaten<\/strong><\/td>\n<td>Reiche Attribute<\/td>\n<td>CF-Konventionen<\/td>\n<td>Reiche Attribute<\/td>\n<td>Beschr\u00e4nkt<\/td>\n<\/tr>\n<tr>\n<td><strong>Lernkurve<\/strong><\/td>\n<td>Steil<\/td>\n<td>M\u00e4\u00dfig<\/td>\n<td>Leicht<\/td>\n<td>Trivial<\/td>\n<\/tr>\n<tr>\n<td><strong>Erhaltung<\/strong><\/td>\n<td>\u2705 Ausgezeichnet<\/td>\n<td>\u2705 Ausgezeichnet<\/td>\n<td>\u26a0\ufe0f Entwickeln<\/td>\n<td>\u2705 menschlich lesbar<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Wann w\u00e4hlen Sie HDF5<\/h3>\n<ul>\n<li><strong>HPC-Umgebungen<\/strong>: MPI-basierte Parallelsimulationen<\/li>\n<li><strong>Langzeitarchive<\/strong>: Bew\u00e4hrtes Format mit \u00fcber 20 Jahren Track Record[^1]<\/li>\n<li><strong>Komplexe Hierarchien<\/strong>: tiefe Gruppenstrukturen, gemischte Datentypen<\/li>\n<li><strong>Gro\u00dfe Bin\u00e4rdaten<\/strong>: Bilder, 3D-Felder, Matrizen<\/li>\n<li><strong>Cross-Sprach<\/strong>: Ben\u00f6tigen Sie C\/Fortran\/MatLab-Kompatibilit\u00e4t<\/li>\n<\/ul>\n<h3>Wenn NetCDF-4 oder ZARR besser sein k\u00f6nnen<\/h3>\n<ul>\n<li><strong>Klima\/Atmosph\u00e4renwissenschaft<\/strong>: NetCDF-4 mit CF-Konventionen ist der Gemeinschaftsstandard<\/li>\n<li><strong>Cloud Storage<\/strong>: Das Verzeichnis-Layout von Zarr funktioniert besser mit Objektspeichern (S3, GCS)<\/li>\n<li><strong>Einfache Zeitreihe<\/strong>: ZARR oder NetCDF4 bieten einfachere APIs<\/li>\n<li><strong>Rapid-Prototyping<\/strong>: Die reine Python-Implementierung von ZARR hat keine Abh\u00e4ngigkeiten der Kompilierungszeit<\/li>\n<\/ul>\n<p>F\u00fcr die meisten <strong>wissenschaftlichen Simulationsprojekte <\/strong> &#8211; insbesondere solche mit PDE-Solvern wie FIPY &#8211; bleibt HDF5 die f\u00e4higste und am weitesten verbreitete Option [^11].<\/p>\n<h2>Langzeitlagerung und -konservierung<\/h2>\n<h3>Warum HDF5 ARCHIVAL-QUALIT\u00c4T ist<\/h3>\n<p>Die <strong>Library of Congress<\/strong> und <strong>National Archives<\/strong> erkennen HDF5 als geeignetes Format f\u00fcr die langfristige Erhaltung[^1] an. Schl\u00fcsselfaktoren:<\/p>\n<ul>\n<li><strong>Open Standard<\/strong>: Nicht propriet\u00e4r, gepflegt von der HDF-Gruppe (Non-Profit)<\/li>\n<li><strong>Selbstbeschreibend<\/strong>: Keine externen Schemadateien erforderlich, um Daten zu interpretieren<\/li>\n<li><strong>Plattformunabh\u00e4ngig<\/strong>: Bin\u00e4rformat funktioniert auf jeder Architektur<\/li>\n<li><strong>Wide Adoption<\/strong>: Wird von der NASA, NOAA, DOE, ESA verwendet; Tausende von Werkzeugen existieren<\/li>\n<li><strong>Stabile Spezifikation<\/strong>: HDF5 1.10+ ist abw\u00e4rtskompatibel; Format\u00e4nderungen sind selten<\/li>\n<\/ul>\n<h3>Best Practices f\u00fcr die Erhaltung<\/h3>\n<ol>\n<li><strong>Numerische IEEE-Formate verwenden<\/strong>: Vermeiden Sie &#8222;native&#8220; Formate, die Daten an bestimmte Hardware-Endianness binden[^1]<\/li>\n<li><strong>Dokumente gr\u00fcndlich<\/strong>: Schlie\u00dfen Sie Einheiten, Beschreibungen, Softwareversionen und Zitate als Attribute ein<\/li>\n<li><strong>Eine Readme-Datei einbeziehen<\/strong>: Speichern Sie menschenlesbare Dokumentationen entweder als Attribut oder als Begleitdatei<\/li>\n<li><strong>Dateien validieren<\/strong>: Verwenden Sie <code>h5dump<\/code> oder <code>h5py<\/code>, um die Integrit\u00e4t vor der Archivierung zu \u00fcberpr\u00fcfen<\/li>\n<li><strong>Software beibehalten<\/strong>: Archivieren Sie die genaue HDF5-Bibliotheksversion (oder einen Docker-Container), die zum Erstellen der Datei verwendet wird<\/li>\n<li><strong>Vermeiden Sie exotische Kompression<\/strong>: Standard-Gzip ist am sichersten; Benutzerdefinierte Filter werden in 20 Jahren m\u00f6glicherweise nicht unterst\u00fctzt<\/li>\n<\/ol>\n<h3>H\u00e4ufige Fallstricke, die Risikodaten<\/h3>\n<ul>\n<li><strong>Kein Journaling <\/strong>: HDF5 fehlen Transaktionsprotokolle. Wenn ein Prozess w\u00e4hrend des Schreibens abst\u00fcrzt, kann die Datei <strong>korrupt und nicht wiederherstellbar<\/strong>[^12] werden. Schreiben Sie immer in eine tempor\u00e4re Datei und benennen Sie sie nach Abschluss um.<\/li>\n<li><strong>Parallel-Write-Rennen<\/strong>: Mehrere Autoren ohne ordnungsgem\u00e4\u00dfe Synchronisierung verursachen Korruption. Verwenden Sie den SWMR-Modus oder die kollektive E \/ A.<\/li>\n<li><strong> Nicht \u00fcbereinstimmende Datentypen <\/strong>: Das Lesen eines Datensatzes mit dem falschen DType verzerrt die Daten. \u00dcberpr\u00fcfen Sie immer <code>dtype<\/code> \u00dcbereinstimmungen zwischen Schreiber und Leser.<\/li>\n<li><strong>Datasets l\u00f6scht keine Dateien<\/strong>: HDF5 markiert den Speicherplatz intern als frei, reduziert jedoch nicht die Dateigr\u00f6\u00dfe. Verwenden Sie <code>h5repack<\/code>, um Speicherplatz zur\u00fcckzugewinnen.<\/li>\n<\/ul>\n<h2>Praktische Checkliste: HDF5 f\u00fcr Simulationsprojekte<\/h2>\n<p>Bevor Sie HDF5 in Ihrem Simulationsworkflow verwenden:<\/p>\n<ul>\n<li><input disabled=\"disabled\" type=\"checkbox\"> <strong>W\u00e4hlen Sie Chunk-Gr\u00f6\u00dfen<\/strong> basierend auf typischen Zugriffsmustern (nicht beliebig)<\/li>\n<li><input disabled=\"disabled\" type=\"checkbox\"> <strong>Komprimierung aktivieren<\/strong> f\u00fcr Archivausg\u00e4nge, f\u00fcr Hot-Checkpoint-Daten deaktivieren<\/li>\n<li><input disabled=\"disabled\" type=\"checkbox\"> <strong>Dokument jedes Datensatzes<\/strong> mit Einheiten, Beschreibungen und Erstellungssoftware<\/li>\n<li><input disabled=\"disabled\" type=\"checkbox\"> <strong>Erweiterbare Datasets<\/strong> f\u00fcr Zeitreihen verwenden, um eine Vorzuweisung zu vermeiden<\/li>\n<li><input disabled=\"disabled\" type=\"checkbox\"> <strong>Parallelschreiben validieren<\/strong> mit kollektiven Operationen, nicht unabh\u00e4ngiger E\/A<\/li>\n<li><input disabled=\"disabled\" type=\"checkbox\"> <strong>Alle Dateihandles schlie\u00dfen<\/strong> (Kontextmanager verwenden: <code>with h5py.File(...)<\/code>)<\/li>\n<li><input disabled=\"disabled\" type=\"checkbox\"> <strong>Backup-kritische Sicherungsl\u00e4ufe<\/strong> Vor der Nachbearbeitung wird der Speicher getrennt<\/li>\n<li><input disabled=\"disabled\" type=\"checkbox\"> <strong>Testwiederherstellung<\/strong>: Simulieren Sie Abst\u00fcrze, um sicherzustellen, dass Teildateien erkannt werden<\/li>\n<li><input disabled=\"disabled\" type=\"checkbox\"> <strong>Ber\u00fccksichtigen Sie netcdf-4<\/strong> Wenn Ihre Community bereits CF-Konventionen verwendet<\/li>\n<li><input disabled=\"disabled\" type=\"checkbox\"> <strong>F\u00fcr Cloud-Speicher<\/strong>, bewerten Sie ZARR als alternatives Format<\/li>\n<\/ul>\n<h2>Interne Verlinkung und verwandte Anleitungen<\/h2>\n<p>Das Verst\u00e4ndnis von HDF5 ist entscheidend f\u00fcr die Verwaltung von Simulationsausgaben in verschiedenen MatForge-Anleitungen:<\/p>\n<ul>\n<li><strong><a href=\"\/managing-large-scale-pde-problems-strategies-solvers-and-hpc-case-studies\/\">Verwalten von PDE-Problemen in gro\u00dfen Ma\u00dfst\u00e4ben<\/a> <\/strong> behandelt HPC-Strategien, bei denen HDF5-Parallel-E\/A-Auszeichnungen hervorstechen.<\/li>\n<li><strong> <a href=\"\/using-fipy-for-phase-field-modeling\/\"> Verwenden von FIPY f\u00fcr die Phasenfeldmodellierung <\/a> <\/strong> Zeigt das Speichern der Simulationsergebnisse in HDF5 f\u00fcr eine sp\u00e4tere Analyse.<\/li>\n<li><strong><a href=\"\/visualizing-simulation-results-effectively\/\">Simulationsergebnisse effektiv visualisieren<\/a><\/strong> zeigt, wie man HDF5-Ausg\u00e4nge f\u00fcr die Nachbearbeitung mit ParaView oder MatplotLib liest.<\/li>\n<li><strong> <a href=\"\/reproducibility-and-its-role-in-debugging\/\"> Reproduzierbarkeit und ihre Rolle beim Debuggen <\/a> <\/strong> Erkl\u00e4rt, wie die selbstbeschreibende Natur von HDF5 die reproduzierbare Forschung unterst\u00fctzt.<\/li>\n<\/ul>\n<h2>Empfehlungen und wann Sie w\u00e4hlen, was<\/h2>\n<p><strong>F\u00fcr die meisten PDE-basierten Simulationen<\/strong> (einschlie\u00dflich FIPY-Benutzer):<\/p>\n<ol>\n<li><strong>Start mit HDF5 + H5Py<\/strong> wegen seiner Reife und MPI-Unterst\u00fctzung<\/li>\n<li><strong>Verwenden Sie GZIP-Komprimierung<\/strong> auf Stufe 4\u20136 f\u00fcr Archivierungsausgaben (gute Balance zwischen Geschwindigkeit\/Gr\u00f6\u00dfe)<\/li>\n<li><strong>Chunk Along Time Dimension<\/strong> als <code>(1, nx, ny)<\/code> f\u00fcr 3D-Zeitreihen<\/li>\n<li><strong>Koordinatenarrays speichern<\/strong> (<code>x<\/code>, <code>y<\/code>, <code>z<\/code>) als separate Datens\u00e4tze mit Unit-Attributen<\/li>\n<li><strong>F\u00fcgen Sie eine <code>\/metadata<\/code>-Gruppe<\/strong> mit Simulationsparametern, Softwareversionen und Git-Hashes hinzu<\/li>\n<\/ol>\n<p><strong>Alternativen ber\u00fccksichtigen, wann<\/strong>:<\/p>\n<ul>\n<li>Ausschlie\u00dflich in Python arbeiten und Cloud-native Speicherung ben\u00f6tigen \u2192 <strong>ZARR<\/strong><\/li>\n<li>Klima-\/Atmosph\u00e4renmodelle mit Standardkonventionen \u2192 <strong>netcdf-4<\/strong><\/li>\n<li>Ben\u00f6tigen Sie lesbare einfache Ausgaben \u2192 <strong>csv\/json<\/strong> (erwarten Sie jedoch gro\u00dfe Dateigr\u00f6\u00dfen und langsame E \/ A)<\/li>\n<\/ul>\n<h2>Schlussfolgerung<\/h2>\n<p>HDF5 bildet die Grundlage f\u00fcr ein robustes wissenschaftliches Datenmanagement. Die Kombination aus hierarchischer Organisation, paralleler E \/ A-, Komprimierung und Rich-Metadaten macht es einzigartig f\u00fcr Simulationsausgaben geeignet, die \u00fcber Jahre bestehen bleiben m\u00fcssen und gleichzeitig \u00fcber Plattformen und Programmiersprachen zug\u00e4nglich bleiben.<\/p>\n<p>Die Macht des Formats geht jedoch mit der Verantwortung einher. Schlechte Auswahlm\u00f6glichkeiten, das Ignorieren kollektiver E \/ A-Muster und unzureichende Metadaten k\u00f6nnen die Leistung und die langfristige Benutzerfreundlichkeit untergraben. Befolgen Sie die hier beschriebenen Best Practices &#8211; insbesondere in Bezug auf Chunking-Strategie, Attributdokumentation und parallele Zugriffsmuster -, um sicherzustellen, dass Ihre Simulationsdaten sowohl performant als auch konservierbar bleiben.<\/p>\n<p>HDF5 ist nicht das neueste Format, aber seine mehr als 20-j\u00e4hrige Erfolgsbilanz in Bezug auf Stabilit\u00e4t und weit verbreitete Akzeptanz in gro\u00dfen Forschungseinrichtungen macht es zur sichersten Wette f\u00fcr Projekte, bei denen Daten Langlebigkeit wichtig sind [^1] [^2].<\/p>\n<h2>weiterlesen<\/h2>\n<ul>\n<li><a href=\"https:\/\/support.hdfgroup.org\/documentation\/hdf5\/latest\/\">HDF5-Benutzerhandbuch<\/a> (offizielle Dokumentation)<\/li>\n<li><a href=\"https:\/\/docs.h5py.org\/en\/latest\/\">H5PY-Dokumentation<\/a><\/li>\n<li><a href=\"https:\/\/www.hdfgroup.org\/2015\/08\/11\/parallel-io-with-hdf5\/\">Parallele E\/A mit HDF5<\/a> (der HDF-Gruppenblog)<\/li>\n<li><a href=\"https:\/\/www.earthdata.nasa.gov\/about\/esdis\/esco\/standards-practices\/hdf5\">Best Practices der NASA HDF5<\/a> (NASA EarthData)<\/li>\n<\/ul>\n<hr>\n<p>[^1]: Kongressbibliothek. &#8222;HDF5, hierarchisches Datenformat, Version 5.&#8220; Format Beschreibung Dokument. Erh\u00e4ltlich \u00fcber Clarin: <a href=\"https:\/\/standards.clarin.eu\/sis\/views\/view-format.xq?id=fHDF5\">https:\/\/standards.clarin.eu\/sis\/views\/view-format.xq?id=fhdf5<\/a><br \/> [^2]: Die HDF-Gruppe. &#8222;HDF5: Eine neue Generation von HDF.&#8220; <a href=\"https:\/\/www.hdfgroup.org\/solutions\/hdf5\/\">https:\/\/www.hdfgroup.org\/solutions\/hdf5\/<\/a><br \/> [^3]: HDF-Gruppe. &#8222;HDF5-Datenmodell und Dateistruktur.&#8220; <a href=\"https:\/\/support.hdfgroup.org\/documentation\/hdf5\/latest\/_h5_d_m__u_g.html\"> https:\/\/support.hdfgroup.org\/documentation\/hdf5\/latest\/_h5_d_m__u_g.html<\/a><br \/> [^4]: HDF-Gruppe. &#8222;HDF5-Attribute.&#8220; <a href=\"https:\/\/support.hdfgroup.org\/documentation\/hdf5\/latest\/_h5_a__u_g.html\"> https:\/\/support.hdfgroup.org\/documentation\/hdf5\/latest\/_h5_a__u_g.html<\/a> <br \/> [^5]: NERSC. &#8222;Einf\u00fchrung in die wissenschaftliche E \/ A.&#8220; <a href=\"https:\/\/support.hdfgroup.org\/documentation\/hdf5-docs\/hdf5_topics\/2016_NERSC_Introduction_to_Scientific_IO.pdf\"> https:\/\/support.hdfgroup.org\/documentation\/hdf5-docs\/hdf5. _topics\/2016_nersc_introduction_to_scientific_io.pdf<\/a><br \/> [^6]: LRZ. &#8222;Best-Practice-Leitfaden &#8211; Parallele E \/ A.&#8220; <a href=\"https:\/\/doku.lrz.de\/files\/10746566\/10746567\/11\/1755197969103\/Best-Practice-Guide-Parallel-IO.pdf\"> https:\/\/doku.lrz.de\/files\/10746566\/10746567\/11\/175. 5197969103\/Best-Practice-Guide-Parallel-IO.pdf<\/a><br \/> [^7]: H5PY-Projekt. &#8222;H5PY-Dokumentation.&#8220; <a href=\"https:\/\/docs.h5py.org\/en\/latest\/\">https:\/\/docs.h5py.org\/en\/latest\/<\/a><br \/> [^8]: HDF-Gruppe. &#8222;Chunking in HDF5.&#8220; <a href=\"https:\/\/support.hdfgroup.org\/documentation\/hdf5-docs\/advanced_topics\/chunking_in_hdf5.html\"> https:\/\/support.hdfgroup.org\/documentation\/hdf5-docs\/advanced_topics\/chunking_in_hdf5.html <\/a> <br \/> [^9]: HDF-Gruppe. &#8222;Hochleistungs-E \/ A mit HDF5 erreichen.&#8220; <a href=\"https:\/\/support.hdfgroup.org\/documentation\/hdf5-docs\/hdf5_topics\/20200206_ECPTutorial-final.pdf\"> https:\/\/support.hdfgroup.org\/documentation\/hdf5-docs\/hdf5_topics\/20200206_eccptutorial-final.pdf<\/a><br \/> [^10]: HDF-Forum. &#8222;HDF5-Datensatz-Gr\u00f6\u00dfe und -Nummer-Fragen.&#8220; <a href=\"https:\/\/forum.hdfgroup.org\/t\/hdf5-dataset-size-and-number-questions\/12215\"> https:\/\/forum.hdfgroup.org\/t\/hdf5-dataset-size-and-number-questions\/12215<\/a> <\/p>\n<p> [^11]: Ambatipudi et al. &#8222;Ein Vergleich von HDF5, ZARR und NetCDF4 bei der Durchf\u00fchrung g\u00e4ngiger E \/ A-Operationen.&#8220; arXiv:2207.09503, 2022.<br \/> [^12]: HDF-Forum. &#8222;HDF5 M\u00f6gliche Datenbesch\u00e4digung oder Verlust?&#8220; <a href=\"https:\/\/stackoverflow.com\/questions\/35837243\/hdf5-possible-data-corruption-or-loss\">https:\/\/stackoverflow.com\/questions\/35837243\/hdf5-possible-data-corruption-or-loss<\/a><\/p>\n","protected":false,"raw":"<p>HDF5 ist der De-facto-Standard f\u00fcr die Speicherung von wissenschaftlichen Simulationsdaten im gro\u00dfen Ma\u00dfstab. Seine hierarchische Struktur, die parallelen E\/A-Funktionen \u00fcber MPI und die integrierte Komprimierung machen es ideal f\u00fcr Hochleistungs-Computing-Umgebungen. Eine unsachgem\u00e4\u00dfe Verwendung - insbesondere schlechte Chunking-Optionen und falsche parallele Zugriffsmuster - kann jedoch zu starker Leistungsminderung oder Datenbesch\u00e4digung f\u00fchren. Dieser Leitfaden behandelt die HDF5-Architektur, die parallele I\/O-Implementierung in Python, Techniken zur Leistungsoptimierung und Best Practices f\u00fcr die Aufbewahrung f\u00fcr die langfristige Speicherung.<\/p>\n<h2>Einleitung: Die Simulationsdaten-Herausforderung<\/h2>\n<p>Wissenschaftliche Simulationen generieren routinem\u00e4\u00dfig Terabyte Daten \u00fcber Tausende von Zeitschritten und mehrere physikalische Felder. Die Verwaltung dieser Sintflut erfordert mehr als nur ein Dateiformat - es erfordert ein System, das verarbeiten kann:<\/p>\n<ul>\n<li><strong>Scale<\/strong>: Gigabyte bis Petabyte von mehrdimensionalen Arrays<\/li>\n<li><strong>Leistung<\/strong>: Effizientes Lesen\/Schreiben auf HPC-Systemen mit parallelen Dateisystemen<\/li>\n<li><strong>Organisation<\/strong>: Selbstbeschreibende Strukturen, die Jahre sp\u00e4ter verst\u00e4ndlich bleiben<\/li>\n<li><strong>Haltbarkeit<\/strong>: Langzeitkonservierung ohne Formatveralterung<\/li>\n<li><strong>Access<\/strong>: Schnelle Untereinstellung ohne vollst\u00e4ndige Datens\u00e4tze zu lesen<\/li>\n<\/ul>\n<p>HDF5 (Hierarchical Data Format Version 5) behebt diese Herausforderungen durch eine Kombination aus flexibler Datenmodellierung, paralleler E\/A-Unterst\u00fctzung und Metadatenintegration. Von der NASA, der NASA, den DOE-Labors und den Forschungseinrichtungen weit verbreitet, ist HDF5 zum R\u00fcckgrat wissenschaftlicher Datenarchive weltweit geworden[^1][^2].<\/p>\n<h2>Was ist HDF5? Architektur und Kernkonzepte<\/h2>\n<p>HDF5 ist sowohl ein <strong>Dateiformat<\/strong> als auch eine <strong>Softwarebibliothek<\/strong>, die einen Container f\u00fcr heterogene wissenschaftliche Daten bereitstellt. Seine Architektur basiert auf sechs grundlegenden Einheiten[^3]:<\/p>\n<ol>\n<li><strong>Gruppe<\/strong>: Containerobjekte analog zu Verzeichnissen, hierarchisch organisieren<\/li>\n<li><strong>Dataset<\/strong>: Mehrdimensionale Arrays mit tats\u00e4chlichen numerischen oder strukturierten Daten<\/li>\n<li><strong>Dataspace<\/strong>: Beschreibt die Datensatzdimensionen (Form, Rang und Ausma\u00df)<\/li>\n<li><strong>DataType<\/strong>: Gibt Elementtypen an (Ganzzahl, Floats, Strings, Compounds)<\/li>\n<li><strong>Attribut<\/strong>: Kleine Metadaten an Gruppen oder Datens\u00e4tze<\/li>\n<li><strong>link<\/strong>: Verbindet Objekte innerhalb der Hierarchie (Hard- und Softlinks)<\/li>\n<\/ol>\n<h3>Die hierarchische Struktur<\/h3>\n<p>Eine HDF5-Datei ist ein gerichteter Graph mit einer einzelnen Wurzelgruppe (<code>\/<\/code>). Gruppen k\u00f6nnen andere Gruppen und Datasets enthalten, die beliebig tiefe Verschachtelung erm\u00f6glichen. Diese Struktur spiegelt ein Dateisystem wider, aber mit wesentlichen Unterschieden:<\/p>\n<ul>\n<li><strong>Selbstbeschreibung<\/strong>: Alle Metadaten (Datentypen, Dimensionen) reisen mit den Daten<\/li>\n<li><strong>Portable<\/strong>: Plattformunabh\u00e4ngiges Bin\u00e4rformat<\/li>\n<li><strong>Extensible<\/strong>: Datens\u00e4tze k\u00f6nnen in der Gr\u00f6\u00dfe ge\u00e4ndert und Gruppen\/Datasets dynamisch hinzugef\u00fcgt werden<\/li>\n<li><strong>Komprimiert<\/strong>: Chunk-basierte Speicherung erm\u00f6glicht Komprimierungsfilter pro Chunk<\/li>\n<\/ul>\n<pre><code>\/simulation\n\u251c\u2500\u2500 metadata\n\u2502   \u251c\u2500\u2500 title (attribute)\n\u2502   \u251c\u2500\u2500 creation_date (attribute)\n\u2502   \u2514\u2500\u2500 parameters (group)\n\u2502       \u251c\u2500\u2500 mesh_size (dataset)\n\u2502       \u2514\u2500\u2500 time_step (dataset)\n\u251c\u2500\u2500 fields\n\u2502   \u251c\u2500\u2500 temperature (dataset, 3D [x,y,z,time])\n\u2502   \u251c\u2500\u2500 velocity (dataset, 4D [x,y,z,time,component])\n\u2502   \u2514\u2500\u2500 pressure (dataset, 3D)\n\u2514\u2500\u2500 output\n    \u251c\u2500\u2500 checkpoint_001.h5 (external link)\n    \u2514\u2500\u2500 checkpoint_002.h5 (external link)\n<\/code><\/pre>\n<h2>Warum HDF5 f\u00fcr wissenschaftliche Simulation?<\/h2>\n<p>Im Vergleich zu einfachen Textformaten (CSV, JSON) oder einfacheren Bin\u00e4rformaten bietet HDF5 kritische Vorteile:<\/p>\n<ul>\n<li><strong>Partial I\/O<\/strong>: Nur notwendige Teilmengen lesen, ohne ganze Datens\u00e4tze zu laden<\/li>\n<li><strong>Kompression<\/strong>: Verlustfreie Komprimierung (gzip, szip, lzf) reduziert die Speicherung um 2\u201310\u00d7<\/li>\n<li><strong>Parallel Access<\/strong>: Mehrere Prozesse k\u00f6nnen \u00fcber MPI-IO gleichzeitig lesen\/schreiben<\/li>\n<li><strong>Metadatenreichtum<\/strong>: Attribute Dokumenteinheiten, Beschreibungen und Provenienz<\/li>\n<li><strong>Gro\u00dfe Dateiunterst\u00fctzung<\/strong>: Behandelt Dateien mit mehr als 2 GB (im Gegensatz zu \u00e4lteren HDF4)<\/li>\n<li><strong>Cross-Plattform<\/strong>: Funktioniert unter Linux, macOS, Windows; Unterst\u00fctzt in Python, C, C++, FORTRAN, MATLAB, R<\/li>\n<\/ul>\n<p>Bei Simulations-Workflows \u2013 bei denen Checkpoint-Dateien, Zeitreihenausgaben und Netzdaten \u00fcber Jahre bestehen m\u00fcssen \u2013 sind diese Funktionen nicht optional; Sie sind essentiell.<\/p>\n<h2>Grundlegendes zur HDF5-Datenorganisation<\/h2>\n<h3>Gruppen und Datens\u00e4tze: Die Bausteine<\/h3>\n<p><strong>Gruppen<\/strong> bieten Namespaces und logische Organisation. Jede Datei hat eine Root-Gruppe (<code>\/<\/code>) und Sie k\u00f6nnen verschachtelte Gruppen beliebig erstellen. Gruppen selbst speichern keine Daten; Sie enthalten Links zu Datasets und anderen Gruppen.<\/p>\n<p><strong>Datasets<\/strong> sind dort, wo Ihre Simulationsergebnisse leben. Ein Dataset ist ein mehrdimensionales Array mit festen oder erweiterbaren Dimensionen. Gemeinsame Muster f\u00fcr Simulationsdaten:<\/p>\n<ul>\n<li><strong>3D-Felder<\/strong>: <code>(nx, ny, nz)<\/code> Arrays f\u00fcr r\u00e4umliche Variablen<\/li>\n<li><strong>4D-Zeitreihen<\/strong>: <code>(nx, ny, nz, nt)<\/code> Arrays mit der vierten Dimension<\/li>\n<li><strong>2D-Schnitte<\/strong>: <code>(nx, nt)<\/code> f\u00fcr Liniensonden oder Sensordaten<\/li>\n<li><strong>Strukturierte Daten<\/strong>: Zusammengesetzte Datentypen f\u00fcr Partikeleigenschaften (Position, Geschwindigkeit, Masse)<\/li>\n<\/ul>\n<h3>Datenbereiche: Gestalten Ihrer Daten<\/h3>\n<p>Ein Dataspace definiert das logische Layout eines Datasets. HDF5 unterst\u00fctzt:<\/p>\n<ul>\n<li><strong>Skalar<\/strong>: Einzelwert (0-D)<\/li>\n<li><strong>Simple<\/strong>: Regul\u00e4res N-dimensionales Array mit festen oder unbegrenzten Abmessungen<\/li>\n<li><strong>Komplex<\/strong>: Willk\u00fcrliche Auswahl mit Hyperslabs<\/li>\n<\/ul>\n<p><strong>Unbegrenzte Dimensionen<\/strong> (erweiterbare Achsen) sind entscheidend f\u00fcr Simulationsausgaben, bei denen die Anzahl der Zeitschritte vorher unbekannt ist.<\/p>\n<h3>Attribute: die selbst beschreibende Kraft<\/h3>\n<p>Attribute sind kleine Metadatenobjekte, die an Gruppen oder Datasets angeh\u00e4ngt sind. Sie sind <em>der prim\u00e4re Mechanismus<\/em> f\u00fcr die Dokumentation Ihrer Daten[^4]. Verwenden Sie Attribute zum Speichern:<\/p>\n<ul>\n<li>Physikalische Einheiten (<code>\"m\/s\"<\/code>, <code>\"K\"<\/code>, <code>\"Pa\"<\/code>)<\/li>\n<li>Beschreibung Zeichenfolgen<\/li>\n<li>Zeitstempel<\/li>\n<li>Simulationsparameter<\/li>\n<li>Zitierinformationen<\/li>\n<li>Softwareversion verwendet<\/li>\n<\/ul>\n<pre><code class=\"language-python\"># Example: Adding attributes with h5py\nimport h5py\n\nwith h5py.File('simulation.h5', 'w') as f:\n    grp = f.create_group('temperature')\n    dset = grp.create_dataset('field', data=temperature_array)\n    \n    dset.attrs['units'] = 'Kelvin'\n    dset.attrs['long_name'] = 'Temperature field'\n    dset.attrs['simulation_time'] = 1234.56\n<\/code><\/pre>\n<h2>Parallele E\/A mit HDF5<\/h2>\n<h3>Was ist paralleles HDF5?<\/h3>\n<p>Parallel HDF5 (PHDF5) erweitert die Standardbibliothek um MPI-IO-Unterst\u00fctzung, sodass mehrere Prozesse gleichzeitig auf dieselbe HDF5-Datei zugreifen k\u00f6nnen. Dies ist f\u00fcr gro\u00df angelegte Simulationen auf HPC-Clustern unerl\u00e4sslich, in denen der Rechenauftrag Hunderte oder Tausende von Kernen umfasst [^5].<\/p>\n<h3>Wie es funktioniert<\/h3>\n<p>Unter der Haube verwendet PHDF5 <strong> MPI-IO <\/strong> (das parallele E \/ A-Subsystem von MPI), um den Zugriff zu koordinieren. Beim \u00d6ffnen einer Datei im Parallelmodus teilen alle Prozesse im MPI Communicator denselben Dateihandle und Koordinatenlesen\/Schreiben.<\/p>\n<pre><code class=\"language-python\"># Parallel HDF5 example (requires h5py built with MPI support)\nfrom mpi4py import MPI\nimport h5py\n\ncomm = MPI.COMM_WORLD\nrank = comm.Get_rank()\nsize = comm.Get_size()\n\n# Each process opens the file collectively\nwith h5py.File('parallel_output.h5', 'w', driver='mpio', comm=comm) as f:\n    # Create a dataset distributed across all processes\n    # Each process writes its chunk of the global array\n    local_data = compute_local_chunk(rank, size)\n    dset = f.create_dataset('field', (global_nx, global_ny), dtype='f8')\n    # Write using hyperslabs\n    dset[local_slice] = local_data\n<\/code><\/pre>\n<h3>Kollektive vs. unabh\u00e4ngige E\/A<\/h3>\n<p>Eine kritische Leistungsunterscheidung in paralleler HDF5:<\/p>\n<ul>\n<li><strong>Collective I\/O<\/strong>: Alle Prozesse nehmen an derselben E\/A-Operation teil. Die MPI-Bibliothek kann Datenbewegung, Aggregation und Striping optimieren. <strong>Verwenden Sie dies wann immer m\u00f6glich<\/strong>.<\/li>\n<li><strong>Independent I\/O<\/strong>: Jeder Prozess \u00f6ffnet, liest und schreibt unabh\u00e4ngig. Dies f\u00fchrt zu einer schlechten Leistung aufgrund von Dateisystemkonflikten und verpassten Optimierungsm\u00f6glichkeiten[^6].<\/li>\n<\/ul>\n<p><strong>Best Practice<\/strong>: Strukturieren Sie Ihren Code so, dass alle Prozesse gleichzeitig <code>read()<\/code> oder <code>write()<\/code> mit kompatiblen HyperSlab-Auswahlen aufrufen. Vermeiden Sie bedingte E \/ A, die nur einige Prozesse ausf\u00fchren.<\/p>\n<h3>Parallele HDF5-Leistungstipps<\/h3>\n<ol>\n<li><strong>Aggregate Writes<\/strong>: Schreiben Sie in gro\u00dfen zusammenh\u00e4ngenden St\u00fccken, nicht in vielen kleinen St\u00fccken<\/li>\n<li><strong>Gesamtpufferung verwenden<\/strong>: Lassen Sie den MPI-Bibliotheks-Cache und Coalesce schreiben<\/li>\n<li><strong>St\u00fccke mit Prozesszerlegung ausrichten<\/strong>: Ordnen Sie den Datensatz-Chunking Ihrer Domain-Zerlegung zu<\/li>\n<li><strong>Vermeiden Sie Dateisystem-Thrashing<\/strong>: Verwenden Sie eine Datei pro Ausgabeschritt, nicht eine Datei pro Prozess<\/li>\n<li><strong>Geeignete Chunk-Cache-Gr\u00f6\u00dfe festlegen<\/strong>: Erh\u00f6hen Sie den Cache f\u00fcr h\u00e4ufig abgerufene Datasets<\/li>\n<\/ol>\n<h2>HDF5 mit Python: Die H5Py-Bibliothek<\/h2>\n<p>Das <a href=\"https:\/\/docs.h5py.org\/en\/latest\/\">h5py<\/a>-Paket bietet die pythonischste Schnittstelle zu HDF5[^7].<\/p>\n<h3>Grundlegende Operationen<\/h3>\n<pre><code class=\"language-python\">import h5py\nimport numpy as np\n\n# Writing data\nwith h5py.File('output.h5', 'w') as f:\n    # Create a dataset\n    data = np.random.randn(1000, 1000)\n    dset = f.create_dataset('temperature', data=data, compression='gzip')\n    \n    # Add attributes\n    dset.attrs['units'] = 'K'\n    dset.attrs['description'] = 'Temperature at final time step'\n    \n    # Create groups for organization\n    grp = f.create_group('initial_conditions')\n    grp.create_dataset('velocity', data=velocity_field)\n\n# Reading data\nwith h5py.File('output.h5', 'r') as f:\n    temp = f['temperature'][:]  # Load entire dataset\n    # Or read a slice\n    slice_ = f['temperature'][100:200, 300:400]\n    \n    # Access attributes\n    units = f['temperature'].attrs['units']\n<\/code><\/pre>\n<h3>Simulationsausgabe effizient schreiben<\/h3>\n<p>Verwenden Sie f\u00fcr zeitabh\u00e4ngige Simulationen <strong>Erweiterbare Datasets<\/strong> mit einer unbegrenzten Zeitdimension:<\/p>\n<pre><code class=\"language-python\">with h5py.File('time_series.h5', 'w') as f:\n    # Create dataset with unlimited maxshape\n    dset = f.create_dataset(\n        'temperature', \n        shape=(0, nx, ny), \n        maxshape=(None, nx, ny),  # Unlimited time dimension\n        dtype='f8',\n        chunks=(1, nx, ny)  # Chunk along time axis\n    )\n    \n    # Append each time step\n    for t in range(num_steps):\n        current_temp = simulate_step(t)\n        dset.resize((t+1, nx, ny))  # Extend dataset\n        dset[t, :, :] = current_temp\n<\/code><\/pre>\n<h3>Anh\u00e4ngen-Modus f\u00fcr Pr\u00fcfpunkte<\/h3>\n<p>Verwenden Sie den Append-Modus (<code>'a'<\/code>), um vorhandenen Dateien neue Ausgaben hinzuzuf\u00fcgen, ohne zu \u00fcberschreiben:<\/p>\n<pre><code class=\"language-python\">with h5py.File('run_001.h5', 'a') as f:\n    if 'checkpoint_002' not in f:\n        f.create_dataset('checkpoint_002', data=new_data)\n<\/code><\/pre>\n<h2>Leistungsoptimierung: Chunking und Komprimierung<\/h2>\n<h3>Chunking: Der Schl\u00fcssel zur Leistung<\/h3>\n<p>HDF5 speichert Datens\u00e4tze in <strong>Chunks<\/strong> \u2013 Hyper-Rechtecke mit fester Gr\u00f6\u00dfe, die die Einheit von E\/A und Komprimierung sind[^8]. Chunking ist <em>Erforderlich<\/em> f\u00fcr:<\/p>\n<ul>\n<li>Datensatzkomprimierung<\/li>\n<li>Erweiterbare Datens\u00e4tze<\/li>\n<li>Effiziente partielle Lese- \/ Schreibvorg\u00e4nge<\/li>\n<li>Parallele E \/ A<\/li>\n<\/ul>\n<p><strong>Chunk-Gr\u00f6\u00dfe wirkt sich dramatisch auf die Leistung aus<\/strong>:<\/p>\n<ul>\n<li><strong>Zu klein<\/strong>: \u00dcberm\u00e4\u00dfiger Metadaten-Overhead, schlechte Kompressionsverh\u00e4ltnisse, hoher Systemaufruf-Overhead<\/li>\n<li><strong>Zu gro\u00df<\/strong>: Das Lesen einer kleinen Teilmenge l\u00e4dt den gesamten Block in den Speicher und verschwendet die E\/A-Bandbreite<\/li>\n<\/ul>\n<p><strong>Faustregel<\/strong>: W\u00e4hlen Sie Bl\u00f6cke, die Ihrem typischen Zugriffsmuster entsprechen. F\u00fcr 3D-Zeitreihen, die plan-by-plane aufrufen, chunk als <code>(1, nx, ny)<\/code> oder <code>(nt, nx, 1)<\/code>, je nachdem, welche Dimension am schnellsten variiert.<\/p>\n<pre><code class=\"language-python\"># Optimal chunking for 3D time-series where we read full XY planes\ndset = f.create_dataset(\n    'field',\n    shape=(nt, nx, ny),\n    chunks=(1, nx, ny),  # Each time step is one chunk\n    compression='gzip'\n)\n\n# Reading one time step only decompresses one chunk\ntime_step_50 = dset[50, :, :]\n<\/code><\/pre>\n<h3>Komprimierung: Trade Storage f\u00fcr CPU<\/h3>\n<p>HDF5 unterst\u00fctzt mehrere verlustfreie Komprimierungsfilter:<\/p>\n<ul>\n<li><strong>Gzip<\/strong>: universell, gute Komprimierung (2\u20135 \u00d7), CPU-intensiv<\/li>\n<li><strong>szip<\/strong>: Schnell, hardwarebeschleunigt auf einigen Systemen, weniger portabel<\/li>\n<li><strong>LZF<\/strong>: Sehr schnelle, m\u00e4\u00dfige Kompression (2\u00d7)<\/li>\n<li><strong>Blosc<\/strong>: Hochleistungs-Multi-Thread (\u00fcber externe Bibliothek)<\/li>\n<\/ul>\n<p><strong>Wann komprimieren<\/strong>:<\/p>\n<ul>\n<li>Archivspeicher, bei dem die Gr\u00f6\u00dfe wichtiger ist als die Schreibgeschwindigkeit<\/li>\n<li>I\/O-gebundene Workloads, bei denen der Dekompressionsaufwand geringer ist als die Lesezeit der Festplatte<\/li>\n<li>Wenn Daten Redundanz aufweisen (glatte Felder, wiederholte Werte)<\/li>\n<\/ul>\n<p><strong>Wann Komprimierung vermeiden<\/strong>:<\/p>\n<ul>\n<li>Ultra-Hochleistungsschreibpfade (Checkpoint-Intervalle &lt; 1 Sekunde)<\/li>\n<li>Bereits komprimierte Daten (Bilder, Videos)<\/li>\n<li>Bei paralleler E\/A mit nicht \u00fcbereinstimmenden Chunk-Gr\u00f6\u00dfen<\/li>\n<\/ul>\n<pre><code class=\"language-python\"># Compression examples\ndset = f.create_dataset('data', data=data, compression='gzip', compression_opts=4)  # gzip level 4\ndset = f.create_dataset('data', data=data, compression='lzf')  # Fast LZF\n<\/code><\/pre>\n<h3>Cache-Konfiguration<\/h3>\n<p>Die HDF5-Bibliothek verwaltet zwei Caches:<\/p>\n<ul>\n<li><strong>Metadaten-Cache<\/strong>: Speichert Informationen zu Gruppen, Datasets, Attributen<\/li>\n<li><strong>Chunk-Cache<\/strong>: H\u00e4lt k\u00fcrzlich aufgerufene Datenbl\u00f6cke<\/li>\n<\/ul>\n<p>F\u00fcr leistungskritische Workloads stimmen Sie diese Caches \u00fcber <code>h5py<\/code> ab:<\/p>\n<pre><code class=\"language-python\">with h5py.File('file.h5', 'w', libver='latest') as f:\n    f.swmr_mode = True  # Enable Single-Writer-Multiple-Reader for concurrent access\n    \n# Configure chunk cache when opening\nwith h5py.File('file.h5', 'r', rdcc_nbytes=1024**3, rdcc_w0=0.75) as f:\n    # 1 GB chunk cache, 75% preemption policy\n    pass\n<\/code><\/pre>\n<h2>Best Practices f\u00fcr Datenorganisation<\/h2>\n<h3>Dateistrukturmuster<\/h3>\n<p><strong>single-file-per-run<\/strong>: Speichern Sie alle Ausgaben einer Simulation in einer einzigen HDF5-Datei mit einer klaren Gruppenhierarchie. Vorteile:<\/p>\n<ul>\n<li>Einzeltransfer- \/ Archiveinheit<\/li>\n<li>Atomische Updates (entweder alle Daten sind geschrieben oder keine)<\/li>\n<li>Einfachere Integrit\u00e4t zu validieren<\/li>\n<\/ul>\n<p><strong>Pr\u00fcfpunkte f\u00fcr mehrere Dateien<\/strong>: Separate Checkpoint-Dateien von der endg\u00fcltigen Ausgabe. Verwenden Sie Softlinks, um sie zu verbinden:<\/p>\n<pre><code>run_001.h5\n\u251c\u2500\u2500 \/initial (link to checkpoint_000.h5:\/data)\n\u251c\u2500\u2500 \/final\n\u2502   \u2514\u2500\u2500 field (dataset)\n\u2514\u2500\u2500 \/checkpoints (group)\n    \u251c\u2500\u2500 checkpoint_000.h5 (external link)\n    \u251c\u2500\u2500 checkpoint_001.h5 (external link)\n    \u2514\u2500\u2500 checkpoint_002.h5 (external link)\n<\/code><\/pre>\n<h3>Dokumentieren Sie alles mit Attributen<\/h3>\n<p>HDF5-Dateien k\u00f6nnen ohne gr\u00fcndliche Dokumentation undurchdringlich werden. <strong>Jeder Datensatz und jede Gruppe sollten beschreibende Attribute haben<\/strong>[^9]:<\/p>\n<pre><code class=\"language-python\">dset.attrs['units'] = 'm\/s'\ndset.attrs['long_name'] = 'Fluid velocity vector'\ndset.attrs['standard_name'] = 'velocity'\ndset.attrs['positive'] = 'up'  # For vertical components\ndset.attrs['grid_mapping'] = '\/mesh\/x_grid'  # Link to coordinate variables\ndset.attrs['comment'] = 'Computed using second-order upwind scheme'\ndset.attrs['software'] = 'FiPy 3.4'\ndset.attrs['git_commit'] = 'abc123def'\n<\/code><\/pre>\n<p>Erw\u00e4gen Sie die \u00dcbernahme der <strong> Klima- und Prognosekonventionen<\/strong> f\u00fcr geophysikalische Simulationen oder dom\u00e4nenspezifische Metadatenstandards, sofern verf\u00fcgbar.<\/p>\n<h3>Vermeiden Sie die Proliferation des Datensatzes<\/h3>\n<p>W\u00e4hrend HDF5 Millionen von Datens\u00e4tzen zul\u00e4sst, verschlechtert sich die Leistung mit \u00fcberm\u00e4\u00dfigen Zahlen[^10]. Bevorzugen:<\/p>\n<ul>\n<li>weniger gro\u00dfe Datens\u00e4tze \u00fcber viele kleine<\/li>\n<li>Zusammengesetzte Datentypen f\u00fcr verwandte Skalarfelder (z. B. Partikelposition + Geschwindigkeit + Masse)<\/li>\n<li>Gruppieren von \u00e4hnlichen kleinen Arrays in einem einzigen strukturierten Datensatz<\/li>\n<\/ul>\n<h3>Defragmentieren Sie gro\u00dfe Dateien<\/h3>\n<p>Mit der Zeit k\u00f6nnen HDF5-Dateien fragmentiert werden, wenn Datens\u00e4tze erstellt und gel\u00f6scht werden. Verwenden Sie <code>h5repack<\/code>, um Dateien optimal umzuschreiben:<\/p>\n<pre><code class=\"language-bash\">h5repack -f GZIP=4 input.h5 output_compressed.h5\nh5repack -l CHUNK=100x100x100 input.h5 rechunked.h5\n<\/code><\/pre>\n<h2>HDF5 vs. Alternativen: NetCDF4, ZARR, CSV<\/h2>\n<h3>Vergleichszusammenfassung<\/h3>\n<table>\n<thead>\n<tr>\n<th>Funktion<\/th>\n<th>HDF5<\/th>\n<th>netcdf-4<\/th>\n<th>ZARR<\/th>\n<th>CSV \/ JSON<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>Parallel I \/ O <\/strong><\/td>\n<td>\u2705 MPI-IO<\/td>\n<td>\u2705 MPI-IO<\/td>\n<td>\u2705 (Cloud-optimiert)<\/td>\n<td>\u274c<\/td>\n<\/tr>\n<tr>\n<td><strong>Kompression<\/strong><\/td>\n<td>Mehrere Filter<\/td>\n<td>gzip \/ szip<\/td>\n<td>Mehrere (BLOCK, GZIP)<\/td>\n<td>\u274c<\/td>\n<\/tr>\n<tr>\n<td><strong>Einzeldatei<\/strong><\/td>\n<td>\u2705<\/td>\n<td>\u2705<\/td>\n<td>\u274c (Verzeichnis)<\/td>\n<td>\u2705<\/td>\n<\/tr>\n<tr>\n<td><strong>Cloud-Native<\/strong><\/td>\n<td>\u26a0\ufe0f (mit HSDs)<\/td>\n<td>\u26a0\ufe0f<\/td>\n<td>\u2705<\/td>\n<td>\u2705<\/td>\n<\/tr>\n<tr>\n<td><strong>Python-First<\/strong><\/td>\n<td>\u26a0\ufe0f (h5py)<\/td>\n<td>\u2705 (netcdf4)<\/td>\n<td>\u2705<\/td>\n<td>\u2705<\/td>\n<\/tr>\n<tr>\n<td><strong>Metadaten<\/strong><\/td>\n<td>Reiche Attribute<\/td>\n<td>CF-Konventionen<\/td>\n<td>Reiche Attribute<\/td>\n<td>Beschr\u00e4nkt<\/td>\n<\/tr>\n<tr>\n<td><strong>Lernkurve<\/strong><\/td>\n<td>Steil<\/td>\n<td>M\u00e4\u00dfig<\/td>\n<td>Leicht<\/td>\n<td>Trivial<\/td>\n<\/tr>\n<tr>\n<td><strong>Erhaltung<\/strong><\/td>\n<td>\u2705 Ausgezeichnet<\/td>\n<td>\u2705 Ausgezeichnet<\/td>\n<td>\u26a0\ufe0f Entwickeln<\/td>\n<td>\u2705 menschlich lesbar<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Wann w\u00e4hlen Sie HDF5<\/h3>\n<ul>\n<li><strong>HPC-Umgebungen<\/strong>: MPI-basierte Parallelsimulationen<\/li>\n<li><strong>Langzeitarchive<\/strong>: Bew\u00e4hrtes Format mit \u00fcber 20 Jahren Track Record[^1]<\/li>\n<li><strong>Komplexe Hierarchien<\/strong>: tiefe Gruppenstrukturen, gemischte Datentypen<\/li>\n<li><strong>Gro\u00dfe Bin\u00e4rdaten<\/strong>: Bilder, 3D-Felder, Matrizen<\/li>\n<li><strong>Cross-Sprach<\/strong>: Ben\u00f6tigen Sie C\/Fortran\/MatLab-Kompatibilit\u00e4t<\/li>\n<\/ul>\n<h3>Wenn NetCDF-4 oder ZARR besser sein k\u00f6nnen<\/h3>\n<ul>\n<li><strong>Klima\/Atmosph\u00e4renwissenschaft<\/strong>: NetCDF-4 mit CF-Konventionen ist der Gemeinschaftsstandard<\/li>\n<li><strong>Cloud Storage<\/strong>: Das Verzeichnis-Layout von Zarr funktioniert besser mit Objektspeichern (S3, GCS)<\/li>\n<li><strong>Einfache Zeitreihe<\/strong>: ZARR oder NetCDF4 bieten einfachere APIs<\/li>\n<li><strong>Rapid-Prototyping<\/strong>: Die reine Python-Implementierung von ZARR hat keine Abh\u00e4ngigkeiten der Kompilierungszeit<\/li>\n<\/ul>\n<p>F\u00fcr die meisten <strong>wissenschaftlichen Simulationsprojekte <\/strong> - insbesondere solche mit PDE-Solvern wie FIPY - bleibt HDF5 die f\u00e4higste und am weitesten verbreitete Option [^11].<\/p>\n<h2>Langzeitlagerung und -konservierung<\/h2>\n<h3>Warum HDF5 ARCHIVAL-QUALIT\u00c4T ist<\/h3>\n<p>Die <strong>Library of Congress<\/strong> und <strong>National Archives<\/strong> erkennen HDF5 als geeignetes Format f\u00fcr die langfristige Erhaltung[^1] an. Schl\u00fcsselfaktoren:<\/p>\n<ul>\n<li><strong>Open Standard<\/strong>: Nicht propriet\u00e4r, gepflegt von der HDF-Gruppe (Non-Profit)<\/li>\n<li><strong>Selbstbeschreibend<\/strong>: Keine externen Schemadateien erforderlich, um Daten zu interpretieren<\/li>\n<li><strong>Plattformunabh\u00e4ngig<\/strong>: Bin\u00e4rformat funktioniert auf jeder Architektur<\/li>\n<li><strong>Wide Adoption<\/strong>: Wird von der NASA, NOAA, DOE, ESA verwendet; Tausende von Werkzeugen existieren<\/li>\n<li><strong>Stabile Spezifikation<\/strong>: HDF5 1.10+ ist abw\u00e4rtskompatibel; Format\u00e4nderungen sind selten<\/li>\n<\/ul>\n<h3>Best Practices f\u00fcr die Erhaltung<\/h3>\n<ol>\n<li><strong>Numerische IEEE-Formate verwenden<\/strong>: Vermeiden Sie \"native\" Formate, die Daten an bestimmte Hardware-Endianness binden[^1]<\/li>\n<li><strong>Dokumente gr\u00fcndlich<\/strong>: Schlie\u00dfen Sie Einheiten, Beschreibungen, Softwareversionen und Zitate als Attribute ein<\/li>\n<li><strong>Eine Readme-Datei einbeziehen<\/strong>: Speichern Sie menschenlesbare Dokumentationen entweder als Attribut oder als Begleitdatei<\/li>\n<li><strong>Dateien validieren<\/strong>: Verwenden Sie <code>h5dump<\/code> oder <code>h5py<\/code>, um die Integrit\u00e4t vor der Archivierung zu \u00fcberpr\u00fcfen<\/li>\n<li><strong>Software beibehalten<\/strong>: Archivieren Sie die genaue HDF5-Bibliotheksversion (oder einen Docker-Container), die zum Erstellen der Datei verwendet wird<\/li>\n<li><strong>Vermeiden Sie exotische Kompression<\/strong>: Standard-Gzip ist am sichersten; Benutzerdefinierte Filter werden in 20 Jahren m\u00f6glicherweise nicht unterst\u00fctzt<\/li>\n<\/ol>\n<h3>H\u00e4ufige Fallstricke, die Risikodaten<\/h3>\n<ul>\n<li><strong>Kein Journaling <\/strong>: HDF5 fehlen Transaktionsprotokolle. Wenn ein Prozess w\u00e4hrend des Schreibens abst\u00fcrzt, kann die Datei <strong>korrupt und nicht wiederherstellbar<\/strong>[^12] werden. Schreiben Sie immer in eine tempor\u00e4re Datei und benennen Sie sie nach Abschluss um.<\/li>\n<li><strong>Parallel-Write-Rennen<\/strong>: Mehrere Autoren ohne ordnungsgem\u00e4\u00dfe Synchronisierung verursachen Korruption. Verwenden Sie den SWMR-Modus oder die kollektive E \/ A.<\/li>\n<li><strong> Nicht \u00fcbereinstimmende Datentypen <\/strong>: Das Lesen eines Datensatzes mit dem falschen DType verzerrt die Daten. \u00dcberpr\u00fcfen Sie immer <code>dtype<\/code> \u00dcbereinstimmungen zwischen Schreiber und Leser.<\/li>\n<li><strong>Datasets l\u00f6scht keine Dateien<\/strong>: HDF5 markiert den Speicherplatz intern als frei, reduziert jedoch nicht die Dateigr\u00f6\u00dfe. Verwenden Sie <code>h5repack<\/code>, um Speicherplatz zur\u00fcckzugewinnen.<\/li>\n<\/ul>\n<h2>Praktische Checkliste: HDF5 f\u00fcr Simulationsprojekte<\/h2>\n<p>Bevor Sie HDF5 in Ihrem Simulationsworkflow verwenden:<\/p>\n<ul>\n<li><input disabled=\"disabled\" type=\"checkbox\"> <strong>W\u00e4hlen Sie Chunk-Gr\u00f6\u00dfen<\/strong> basierend auf typischen Zugriffsmustern (nicht beliebig)<\/li>\n<li><input disabled=\"disabled\" type=\"checkbox\"> <strong>Komprimierung aktivieren<\/strong> f\u00fcr Archivausg\u00e4nge, f\u00fcr Hot-Checkpoint-Daten deaktivieren<\/li>\n<li><input disabled=\"disabled\" type=\"checkbox\"> <strong>Dokument jedes Datensatzes<\/strong> mit Einheiten, Beschreibungen und Erstellungssoftware<\/li>\n<li><input disabled=\"disabled\" type=\"checkbox\"> <strong>Erweiterbare Datasets<\/strong> f\u00fcr Zeitreihen verwenden, um eine Vorzuweisung zu vermeiden<\/li>\n<li><input disabled=\"disabled\" type=\"checkbox\"> <strong>Parallelschreiben validieren<\/strong> mit kollektiven Operationen, nicht unabh\u00e4ngiger E\/A<\/li>\n<li><input disabled=\"disabled\" type=\"checkbox\"> <strong>Alle Dateihandles schlie\u00dfen<\/strong> (Kontextmanager verwenden: <code>with h5py.File(...)<\/code>)<\/li>\n<li><input disabled=\"disabled\" type=\"checkbox\"> <strong>Backup-kritische Sicherungsl\u00e4ufe<\/strong> Vor der Nachbearbeitung wird der Speicher getrennt<\/li>\n<li><input disabled=\"disabled\" type=\"checkbox\"> <strong>Testwiederherstellung<\/strong>: Simulieren Sie Abst\u00fcrze, um sicherzustellen, dass Teildateien erkannt werden<\/li>\n<li><input disabled=\"disabled\" type=\"checkbox\"> <strong>Ber\u00fccksichtigen Sie netcdf-4<\/strong> Wenn Ihre Community bereits CF-Konventionen verwendet<\/li>\n<li><input disabled=\"disabled\" type=\"checkbox\"> <strong>F\u00fcr Cloud-Speicher<\/strong>, bewerten Sie ZARR als alternatives Format<\/li>\n<\/ul>\n<h2>Interne Verlinkung und verwandte Anleitungen<\/h2>\n<p>Das Verst\u00e4ndnis von HDF5 ist entscheidend f\u00fcr die Verwaltung von Simulationsausgaben in verschiedenen MatForge-Anleitungen:<\/p>\n<ul>\n<li><strong><a href=\"\/managing-large-scale-pde-problems-strategies-solvers-and-hpc-case-studies\/\">Verwalten von PDE-Problemen in gro\u00dfen Ma\u00dfst\u00e4ben<\/a> <\/strong> behandelt HPC-Strategien, bei denen HDF5-Parallel-E\/A-Auszeichnungen hervorstechen.<\/li>\n<li><strong> <a href=\"\/using-fipy-for-phase-field-modeling\/\"> Verwenden von FIPY f\u00fcr die Phasenfeldmodellierung <\/a> <\/strong> Zeigt das Speichern der Simulationsergebnisse in HDF5 f\u00fcr eine sp\u00e4tere Analyse.<\/li>\n<li><strong><a href=\"\/visualizing-simulation-results-effectively\/\">Simulationsergebnisse effektiv visualisieren<\/a><\/strong> zeigt, wie man HDF5-Ausg\u00e4nge f\u00fcr die Nachbearbeitung mit ParaView oder MatplotLib liest.<\/li>\n<li><strong> <a href=\"\/reproducibility-and-its-role-in-debugging\/\"> Reproduzierbarkeit und ihre Rolle beim Debuggen <\/a> <\/strong> Erkl\u00e4rt, wie die selbstbeschreibende Natur von HDF5 die reproduzierbare Forschung unterst\u00fctzt.<\/li>\n<\/ul>\n<h2>Empfehlungen und wann Sie w\u00e4hlen, was<\/h2>\n<p><strong>F\u00fcr die meisten PDE-basierten Simulationen<\/strong> (einschlie\u00dflich FIPY-Benutzer):<\/p>\n<ol>\n<li><strong>Start mit HDF5 + H5Py<\/strong> wegen seiner Reife und MPI-Unterst\u00fctzung<\/li>\n<li><strong>Verwenden Sie GZIP-Komprimierung<\/strong> auf Stufe 4\u20136 f\u00fcr Archivierungsausgaben (gute Balance zwischen Geschwindigkeit\/Gr\u00f6\u00dfe)<\/li>\n<li><strong>Chunk Along Time Dimension<\/strong> als <code>(1, nx, ny)<\/code> f\u00fcr 3D-Zeitreihen<\/li>\n<li><strong>Koordinatenarrays speichern<\/strong> (<code>x<\/code>, <code>y<\/code>, <code>z<\/code>) als separate Datens\u00e4tze mit Unit-Attributen<\/li>\n<li><strong>F\u00fcgen Sie eine <code>\/metadata<\/code>-Gruppe<\/strong> mit Simulationsparametern, Softwareversionen und Git-Hashes hinzu<\/li>\n<\/ol>\n<p><strong>Alternativen ber\u00fccksichtigen, wann<\/strong>:<\/p>\n<ul>\n<li>Ausschlie\u00dflich in Python arbeiten und Cloud-native Speicherung ben\u00f6tigen \u2192 <strong>ZARR<\/strong><\/li>\n<li>Klima-\/Atmosph\u00e4renmodelle mit Standardkonventionen \u2192 <strong>netcdf-4<\/strong><\/li>\n<li>Ben\u00f6tigen Sie lesbare einfache Ausgaben \u2192 <strong>csv\/json<\/strong> (erwarten Sie jedoch gro\u00dfe Dateigr\u00f6\u00dfen und langsame E \/ A)<\/li>\n<\/ul>\n<h2>Schlussfolgerung<\/h2>\n<p>HDF5 bildet die Grundlage f\u00fcr ein robustes wissenschaftliches Datenmanagement. Die Kombination aus hierarchischer Organisation, paralleler E \/ A-, Komprimierung und Rich-Metadaten macht es einzigartig f\u00fcr Simulationsausgaben geeignet, die \u00fcber Jahre bestehen bleiben m\u00fcssen und gleichzeitig \u00fcber Plattformen und Programmiersprachen zug\u00e4nglich bleiben.<\/p>\n<p>Die Macht des Formats geht jedoch mit der Verantwortung einher. Schlechte Auswahlm\u00f6glichkeiten, das Ignorieren kollektiver E \/ A-Muster und unzureichende Metadaten k\u00f6nnen die Leistung und die langfristige Benutzerfreundlichkeit untergraben. Befolgen Sie die hier beschriebenen Best Practices - insbesondere in Bezug auf Chunking-Strategie, Attributdokumentation und parallele Zugriffsmuster -, um sicherzustellen, dass Ihre Simulationsdaten sowohl performant als auch konservierbar bleiben.<\/p>\n<p>HDF5 ist nicht das neueste Format, aber seine mehr als 20-j\u00e4hrige Erfolgsbilanz in Bezug auf Stabilit\u00e4t und weit verbreitete Akzeptanz in gro\u00dfen Forschungseinrichtungen macht es zur sichersten Wette f\u00fcr Projekte, bei denen Daten Langlebigkeit wichtig sind [^1] [^2].<\/p>\n<h2>weiterlesen<\/h2>\n<ul>\n<li><a href=\"https:\/\/support.hdfgroup.org\/documentation\/hdf5\/latest\/\">HDF5-Benutzerhandbuch<\/a> (offizielle Dokumentation)<\/li>\n<li><a href=\"https:\/\/docs.h5py.org\/en\/latest\/\">H5PY-Dokumentation<\/a><\/li>\n<li><a href=\"https:\/\/www.hdfgroup.org\/2015\/08\/11\/parallel-io-with-hdf5\/\">Parallele E\/A mit HDF5<\/a> (der HDF-Gruppenblog)<\/li>\n<li><a href=\"https:\/\/www.earthdata.nasa.gov\/about\/esdis\/esco\/standards-practices\/hdf5\">Best Practices der NASA HDF5<\/a> (NASA EarthData)<\/li>\n<\/ul>\n<hr>\n<p>[^1]: Kongressbibliothek. \"HDF5, hierarchisches Datenformat, Version 5.\" Format Beschreibung Dokument. Erh\u00e4ltlich \u00fcber Clarin: <a href=\"https:\/\/standards.clarin.eu\/sis\/views\/view-format.xq?id=fHDF5\">https:\/\/standards.clarin.eu\/sis\/views\/view-format.xq?id=fhdf5<\/a><br> [^2]: Die HDF-Gruppe. \"HDF5: Eine neue Generation von HDF.\" <a href=\"https:\/\/www.hdfgroup.org\/solutions\/hdf5\/\">https:\/\/www.hdfgroup.org\/solutions\/hdf5\/<\/a><br> [^3]: HDF-Gruppe. \"HDF5-Datenmodell und Dateistruktur.\" <a href=\"https:\/\/support.hdfgroup.org\/documentation\/hdf5\/latest\/_h5_d_m__u_g.html\"> https:\/\/support.hdfgroup.org\/documentation\/hdf5\/latest\/_h5_d_m__u_g.html<\/a><br> [^4]: HDF-Gruppe. \"HDF5-Attribute.\" <a href=\"https:\/\/support.hdfgroup.org\/documentation\/hdf5\/latest\/_h5_a__u_g.html\"> https:\/\/support.hdfgroup.org\/documentation\/hdf5\/latest\/_h5_a__u_g.html<\/a> <br> [^5]: NERSC. \"Einf\u00fchrung in die wissenschaftliche E \/ A.\" <a href=\"https:\/\/support.hdfgroup.org\/documentation\/hdf5-docs\/hdf5_topics\/2016_NERSC_Introduction_to_Scientific_IO.pdf\"> https:\/\/support.hdfgroup.org\/documentation\/hdf5-docs\/hdf5. _topics\/2016_nersc_introduction_to_scientific_io.pdf<\/a><br> [^6]: LRZ. \"Best-Practice-Leitfaden - Parallele E \/ A.\" <a href=\"https:\/\/doku.lrz.de\/files\/10746566\/10746567\/11\/1755197969103\/Best-Practice-Guide-Parallel-IO.pdf\"> https:\/\/doku.lrz.de\/files\/10746566\/10746567\/11\/175. 5197969103\/Best-Practice-Guide-Parallel-IO.pdf<\/a><br> [^7]: H5PY-Projekt. \"H5PY-Dokumentation.\" <a href=\"https:\/\/docs.h5py.org\/en\/latest\/\">https:\/\/docs.h5py.org\/en\/latest\/<\/a><br> [^8]: HDF-Gruppe. \"Chunking in HDF5.\" <a href=\"https:\/\/support.hdfgroup.org\/documentation\/hdf5-docs\/advanced_topics\/chunking_in_hdf5.html\"> https:\/\/support.hdfgroup.org\/documentation\/hdf5-docs\/advanced_topics\/chunking_in_hdf5.html <\/a> <br> [^9]: HDF-Gruppe. \"Hochleistungs-E \/ A mit HDF5 erreichen.\" <a href=\"https:\/\/support.hdfgroup.org\/documentation\/hdf5-docs\/hdf5_topics\/20200206_ECPTutorial-final.pdf\"> https:\/\/support.hdfgroup.org\/documentation\/hdf5-docs\/hdf5_topics\/20200206_eccptutorial-final.pdf<\/a><br> [^10]: HDF-Forum. \"HDF5-Datensatz-Gr\u00f6\u00dfe und -Nummer-Fragen.\" <a href=\"https:\/\/forum.hdfgroup.org\/t\/hdf5-dataset-size-and-number-questions\/12215\"> https:\/\/forum.hdfgroup.org\/t\/hdf5-dataset-size-and-number-questions\/12215<\/a> <br> <br> [^11]: Ambatipudi et al. \"Ein Vergleich von HDF5, ZARR und NetCDF4 bei der Durchf\u00fchrung g\u00e4ngiger E \/ A-Operationen.\" arXiv:2207.09503, 2022.<br> [^12]: HDF-Forum. \"HDF5 M\u00f6gliche Datenbesch\u00e4digung oder Verlust?\" <a href=\"https:\/\/stackoverflow.com\/questions\/35837243\/hdf5-possible-data-corruption-or-loss\">https:\/\/stackoverflow.com\/questions\/35837243\/hdf5-possible-data-corruption-or-loss<\/a><\/p>\n"},"excerpt":{"rendered":"<p><span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Reading Time: <\/span> <span class=\"rt-time\"> 10<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span>HDF5 ist der De-facto-Standard f\u00fcr die Speicherung von wissenschaftlichen Simulationsdaten im gro\u00dfen Ma\u00dfstab. Seine hierarchische Struktur, die parallelen E\/A-Funktionen \u00fcber MPI und die integrierte Komprimierung machen es ideal f\u00fcr Hochleistungs-Computing-Umgebungen. Eine unsachgem\u00e4\u00dfe Verwendung &#8211; insbesondere schlechte Chunking-Optionen und falsche parallele Zugriffsmuster &#8211; kann jedoch zu starker Leistungsminderung oder Datenbesch\u00e4digung f\u00fchren. Dieser Leitfaden behandelt die HDF5-Architektur, [&hellip;]<\/p>\n","protected":false,"raw":""},"author":6,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_locale":"de_DE","_original_post":"https:\/\/matforge.org\/?p=184","iawp_total_views":0,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-810","post","type-post","status-publish","format-standard","hentry","category-simulation-modeling-projects","de-DE"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>HDF5 f\u00fcr Simulationsdaten: Parallele E\/A und Langzeitspeicherung - matforge.org<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/matforge.org\/de\/hdf5-for-simulation-data-parallel-io-long-term-storage\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"HDF5 f\u00fcr Simulationsdaten: Parallele E\/A und Langzeitspeicherung - matforge.org\" \/>\n<meta property=\"og:description\" content=\"Reading Time:  10 minutesHDF5 ist der De-facto-Standard f\u00fcr die Speicherung von wissenschaftlichen Simulationsdaten im gro\u00dfen Ma\u00dfstab. Seine hierarchische Struktur, die parallelen E\/A-Funktionen \u00fcber MPI und die integrierte Komprimierung machen es ideal f\u00fcr Hochleistungs-Computing-Umgebungen. Eine unsachgem\u00e4\u00dfe Verwendung &#8211; insbesondere schlechte Chunking-Optionen und falsche parallele Zugriffsmuster &#8211; kann jedoch zu starker Leistungsminderung oder Datenbesch\u00e4digung f\u00fchren. Dieser Leitfaden behandelt die HDF5-Architektur, [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/matforge.org\/de\/hdf5-for-simulation-data-parallel-io-long-term-storage\/\" \/>\n<meta property=\"og:site_name\" content=\"matforge.org\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-30T12:22:34+00:00\" \/>\n<meta name=\"author\" content=\"steven\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"steven\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"16\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/matforge.org\\\/de\\\/hdf5-for-simulation-data-parallel-io-long-term-storage\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/de\\\/hdf5-for-simulation-data-parallel-io-long-term-storage\\\/\"},\"author\":{\"name\":\"steven\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/8f690fb596d657b12994b83caa788f03\"},\"headline\":\"HDF5 f\u00fcr Simulationsdaten: Parallele E\\\/A und Langzeitspeicherung\",\"datePublished\":\"2026-07-30T12:22:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/de\\\/hdf5-for-simulation-data-parallel-io-long-term-storage\\\/\"},\"wordCount\":2515,\"commentCount\":0,\"articleSection\":[\"Simulation & amp; Modellierungsprojekte\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/matforge.org\\\/de\\\/hdf5-for-simulation-data-parallel-io-long-term-storage\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/matforge.org\\\/de\\\/hdf5-for-simulation-data-parallel-io-long-term-storage\\\/\",\"url\":\"https:\\\/\\\/matforge.org\\\/de\\\/hdf5-for-simulation-data-parallel-io-long-term-storage\\\/\",\"name\":\"HDF5 f\u00fcr Simulationsdaten: Parallele E\\\/A und Langzeitspeicherung - matforge.org\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#website\"},\"datePublished\":\"2026-07-30T12:22:34+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/8f690fb596d657b12994b83caa788f03\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/de\\\/hdf5-for-simulation-data-parallel-io-long-term-storage\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/matforge.org\\\/de\\\/hdf5-for-simulation-data-parallel-io-long-term-storage\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/matforge.org\\\/de\\\/hdf5-for-simulation-data-parallel-io-long-term-storage\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/matforge.org\\\/de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"HDF5 f\u00fcr Simulationsdaten: Parallele E\\\/A und Langzeitspeicherung\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#website\",\"url\":\"https:\\\/\\\/matforge.org\\\/\",\"name\":\"matforge.org\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/matforge.org\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/8f690fb596d657b12994b83caa788f03\",\"name\":\"steven\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d46cfcd83a298f27e8d66bfa035514fefca7652f26bd3ef7402f82b68a41ec0f?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d46cfcd83a298f27e8d66bfa035514fefca7652f26bd3ef7402f82b68a41ec0f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d46cfcd83a298f27e8d66bfa035514fefca7652f26bd3ef7402f82b68a41ec0f?s=96&d=mm&r=g\",\"caption\":\"steven\"},\"url\":\"https:\\\/\\\/matforge.org\\\/author\\\/steven\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"HDF5 f\u00fcr Simulationsdaten: Parallele E\/A und Langzeitspeicherung - matforge.org","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/matforge.org\/de\/hdf5-for-simulation-data-parallel-io-long-term-storage\/","og_locale":"de_DE","og_type":"article","og_title":"HDF5 f\u00fcr Simulationsdaten: Parallele E\/A und Langzeitspeicherung - matforge.org","og_description":"Reading Time:  10 minutesHDF5 ist der De-facto-Standard f\u00fcr die Speicherung von wissenschaftlichen Simulationsdaten im gro\u00dfen Ma\u00dfstab. Seine hierarchische Struktur, die parallelen E\/A-Funktionen \u00fcber MPI und die integrierte Komprimierung machen es ideal f\u00fcr Hochleistungs-Computing-Umgebungen. Eine unsachgem\u00e4\u00dfe Verwendung &#8211; insbesondere schlechte Chunking-Optionen und falsche parallele Zugriffsmuster &#8211; kann jedoch zu starker Leistungsminderung oder Datenbesch\u00e4digung f\u00fchren. Dieser Leitfaden behandelt die HDF5-Architektur, [&hellip;]","og_url":"https:\/\/matforge.org\/de\/hdf5-for-simulation-data-parallel-io-long-term-storage\/","og_site_name":"matforge.org","article_published_time":"2026-07-30T12:22:34+00:00","author":"steven","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"steven","Gesch\u00e4tzte Lesezeit":"16\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/matforge.org\/de\/hdf5-for-simulation-data-parallel-io-long-term-storage\/#article","isPartOf":{"@id":"https:\/\/matforge.org\/de\/hdf5-for-simulation-data-parallel-io-long-term-storage\/"},"author":{"name":"steven","@id":"https:\/\/matforge.org\/#\/schema\/person\/8f690fb596d657b12994b83caa788f03"},"headline":"HDF5 f\u00fcr Simulationsdaten: Parallele E\/A und Langzeitspeicherung","datePublished":"2026-07-30T12:22:34+00:00","mainEntityOfPage":{"@id":"https:\/\/matforge.org\/de\/hdf5-for-simulation-data-parallel-io-long-term-storage\/"},"wordCount":2515,"commentCount":0,"articleSection":["Simulation & amp; Modellierungsprojekte"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/matforge.org\/de\/hdf5-for-simulation-data-parallel-io-long-term-storage\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/matforge.org\/de\/hdf5-for-simulation-data-parallel-io-long-term-storage\/","url":"https:\/\/matforge.org\/de\/hdf5-for-simulation-data-parallel-io-long-term-storage\/","name":"HDF5 f\u00fcr Simulationsdaten: Parallele E\/A und Langzeitspeicherung - matforge.org","isPartOf":{"@id":"https:\/\/matforge.org\/#website"},"datePublished":"2026-07-30T12:22:34+00:00","author":{"@id":"https:\/\/matforge.org\/#\/schema\/person\/8f690fb596d657b12994b83caa788f03"},"breadcrumb":{"@id":"https:\/\/matforge.org\/de\/hdf5-for-simulation-data-parallel-io-long-term-storage\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/matforge.org\/de\/hdf5-for-simulation-data-parallel-io-long-term-storage\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/matforge.org\/de\/hdf5-for-simulation-data-parallel-io-long-term-storage\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/matforge.org\/de\/"},{"@type":"ListItem","position":2,"name":"HDF5 f\u00fcr Simulationsdaten: Parallele E\/A und Langzeitspeicherung"}]},{"@type":"WebSite","@id":"https:\/\/matforge.org\/#website","url":"https:\/\/matforge.org\/","name":"matforge.org","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/matforge.org\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Person","@id":"https:\/\/matforge.org\/#\/schema\/person\/8f690fb596d657b12994b83caa788f03","name":"steven","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/d46cfcd83a298f27e8d66bfa035514fefca7652f26bd3ef7402f82b68a41ec0f?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/d46cfcd83a298f27e8d66bfa035514fefca7652f26bd3ef7402f82b68a41ec0f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d46cfcd83a298f27e8d66bfa035514fefca7652f26bd3ef7402f82b68a41ec0f?s=96&d=mm&r=g","caption":"steven"},"url":"https:\/\/matforge.org\/author\/steven\/"}]}},"_links":{"self":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/810","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/comments?post=810"}],"version-history":[{"count":1,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/810\/revisions"}],"predecessor-version":[{"id":998,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/810\/revisions\/998"}],"wp:attachment":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/media?parent=810"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/categories?post=810"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/tags?post=810"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}