Hiearchical Data Format
- data format specification
- application support library implementation
designed to address old HDF and anticipate modern system requirements
- single file could not store >20k objects or >2GB
-
data models are less consistent than desired
-
there are more object types than desired
- datatypes are too restricted
-
there are more object types than desired
-
does not support parallel I/O
- difficult for multithreading
++
- a new file format for larger files and larger object capacity
-
simple data model
- multidimensional array of record structs
- grouping structure
- simple API for parallel I/O, threading, and more
HDF5 File Organization and Data Model
organized into hiearchical structures, groups and datasets
-
groups and group members is similar to working with directories and files in UNIX
i.e.
- UNIX directories and files are described by their absolute path names, like objects in HDF5 file
e.g. `/` signifies the root group `/foo` signifies a member of the root group called "foo" `/foo/zoo` signifies a member of the group "foo" which in turn is a member of the root group
any HDF5 group or dataset may have an attribute list
-
an HDF5 attribute is a user-defined HDF5 structure
- providing extra information about an hdf5 object
HDF5 Groups
a structure containing zero or more objects
-
a group header
- containing a group name and list of group attributes
-
a group symbol table
- a list of the HDF5 objects that belong to the group
HDF5 Datasets
a dataset stored in a file
-
a header contains information to interpret the array portion of the dataset, as well as metadata that describes the dataset
-
includes…
- name of the object
- its dimensionality
- its number-type
- information about how the data itself is stored on disk
- other info to speed up access or maintain file integrity
-
includes…
four classes of information are in any header: name, datatype, dataspace, and storage layout
-
name is a sequence of alphanumeric ASCII characters
-
datatype allows two categories of datatypes
-
atomic datatypes are not decomposed at the datatype interface level
- e.g. float, integer, string, bitfield, and opaque
-
native datatypes are system-specific instances of atomic datatypes
-
e.g. predefined datatypes supported by their compiler
-
C-like datatypes supported by hardware of the machine on which the library was compiled
-
when describing data values in memory use the "native" designation
"H5TNATIVECHAR" -> signed char (in C datatype) "H5TNATIVEUCHAR" -> unsigned char (in C datatype)
-
-
e.g. predefined datatypes supported by their compiler
-
compound datatypes are made up of atomic datatypes
-
e.g. similar to a `struct` in C
-
the parts of this datatype are called members
- members of this datatype may be any datatype including compound datatypes
- you can read members from a compound datatype w/o reading the whole type
-
the parts of this datatype are called members
-
e.g. similar to a `struct` in C
-
named datatypes are either atomic or compound datatypes
- designated to be shared across datasets
-
e.g. stored in a file independently of any dataset
- referenced by all datasets that have this datatype
- may have associated attributes list
-
atomic datatypes are not decomposed at the datatype interface level
-
dataspace