Navigate back: Main / HDF5 User Guide
The HDF5 Data Mapping can only be used with the HDF5 VOL connectors that implement map objects. The native HDF5 library does not support this feature.
HDF5 Map Object
Introduction
While the HDF5 data model provides a flexible way to store structured data, some applications require a more general mechanism for indexing information with arbitrary keys. HDF5 Map objects address this need by providing application-defined key-value stores where key-value pairs can be added, retrieved by key, and iterated over.
Map objects are available only through VOL connectors that implement the map interface. The native HDF5 file format does not support map objects. VOL connectors with map support include DAOS and other storage systems optimized for key-value operations.
- See also
- VOL Mapping (H5M) Reference Manual
Map Object Life Cycle
Map objects follow a well-defined life cycle from creation through cleanup:
-
Creation
-
Create a new map with H5Mcreate() or H5Mcreate_anon():
-
H5Mcreate() creates a map and links it into the file hierarchy with a specified name
-
H5Mcreate_anon() creates an anonymous map that must be linked with H5Olink before closing
-
Specify the key datatype and value datatype during creation - these define how keys and values are stored in the map
-
Optionally provide creation and access property lists (MCPL and MAPL) to control map behavior
-
The function returns a map identifier (hid_t) used for all subsequent operations
-
Opening
-
Open an existing map with H5Mopen() by providing its location and name
-
Optionally specify a map access property list (MAPL) to control access behavior
-
Multiple opens of the same map are allowed and each returns a separate identifier
-
Data Operations
-
Adding/Updating: Use H5Mput() to add new key-value pairs or update existing values
-
Specify memory datatypes for the key and value being written
-
If the key already exists, its value is updated
-
If the key is new, a new key-value pair is added
-
Retrieving: Use H5Mget() to retrieve a value by its key
-
Provide a buffer to receive the value
-
Specify memory datatypes for key and value
-
Type conversion is performed if memory and stored datatypes differ
-
Checking Existence: Use H5Mexists() to check if a key exists without retrieving its value
-
Deleting: Use H5Mdelete() to remove a key-value pair from the map
-
Iterating: Use H5Miterate() or H5Miterate_by_name() to process all key-value pairs
-
Provide a callback function that is invoked for each key-value pair
-
Iteration order is determined by the VOL connector implementation
-
Can start iteration from a specific index position
-
Query Operations
-
Closing
-
Close the map with H5Mclose() when finished
-
All map identifiers should be closed before closing the file
-
Closing a map does not delete it from the file
-
The library maintains reference counts and will not actually close the map until all identifiers are closed
Map Property Lists
Map objects use two types of property lists that fit into the HDF5 property list class hierarchy (see Property List Classes):
These property list classes follow the same inheritance hierarchy as other HDF5 objects. The MCPL inherits properties relevant to object creation (like character encoding for names), while the MAPL controls access-specific settings.
Key and Value Datatypes
Map objects require two datatypes:
During H5Mput() and H5Mget() operations, memory datatypes can differ from the stored datatypes. The HDF5 library will perform type conversion as needed, similar to dataset I/O operations.
Example Usage
The following example demonstrates creating a map, adding key-value pairs, and retrieving values. Note that this example requires a VOL connector with map support (e.g., DAOS). See HDF5 Virtual Object Layer (VOL) for VOL connector configuration details.
hid_t file_id, map_id, vls_type_id, fapl_id;
const char *names[2] = {"Alice", "Bob"};
uint64_t IDs[2] = {25385486, 34873275};
uint64_t val_out;
if(ret < 0 || val_out != IDs[0]) {
fprintf(stderr, "Failed to retrieve correct value from map\n");
goto error;
}
return 0;
error:
return -1;
#define H5E_END_TRY
Definition H5Epublic.h:103
#define H5E_BEGIN_TRY
Definition H5Epublic.h:84
#define H5F_ACC_TRUNC
Definition H5Fpublic.h:30
int64_t hid_t
Definition H5Ipublic.h:60
#define H5P_FILE_ACCESS
Definition H5Ppublic.h:56
#define H5P_DEFAULT
Definition H5Ppublic.h:220
#define H5T_VARIABLE
Definition H5Tpublic.h:208
int herr_t
Definition H5public.h:252
herr_t H5Fclose(hid_t file_id)
Terminates access to an HDF5 file.
hid_t H5Fcreate(const char *filename, unsigned flags, hid_t fcpl_id, hid_t fapl_id)
Creates an HDF5 file.
herr_t H5Mget(hid_t map_id, hid_t key_mem_type_id, const void *key, hid_t val_mem_type_id, void *value, hid_t dxpl_id)
Retrieves a key-value pair from a map object.
herr_t H5Mput(hid_t map_id, hid_t key_mem_type_id, const void *key, hid_t val_mem_type_id, const void *value, hid_t dxpl_id)
Adds a key-value pair to a map object.
hid_t H5Mcreate(hid_t loc_id, const char *name, hid_t key_type_id, hid_t val_type_id, hid_t lcpl_id, hid_t mcpl_id, hid_t mapl_id)
Creates a map object.
herr_t H5Mclose(hid_t map_id)
Terminates access to a map object.
herr_t H5Tset_size(hid_t type_id, size_t size)
Sets size for a datatype.
hid_t H5Tcopy(hid_t type_id)
Copies an existing datatype.
herr_t H5Tclose(hid_t type_id)
Releases a datatype.
#define H5T_NATIVE_UINT64
Definition H5Tpublic.h:1106
#define H5T_C_S1
Definition H5Tpublic.h:572
herr_t H5Pclose(hid_t plist_id)
Terminates access to a property list.
hid_t H5Pcreate(hid_t cls_id)
Creates a new property list as an instance of a property list class.
Important Notes
-
VOL Connector Requirement: Map functionality is only available through VOL connectors that implement the map interface. The native HDF5 file format does not support maps.
-
Experimental API: The H5M interface is experimental and subject to change in future releases. Application code using maps should be prepared for potential API modifications.
-
Key Uniqueness: Each key in a map must be unique. Calling H5Mput() with an existing key will update that key's value rather than creating a duplicate entry.
-
Iteration Order: The order in which key-value pairs are returned during iteration is determined by the VOL connector implementation and may not be predictable.
-
Type Conversion: As with datasets, the library performs datatype conversion between memory and storage representations. Ensure memory buffers are sized appropriately for the memory datatype specified.
-
Asynchronous Operations: Several map operations have asynchronous variants (e.g., H5Mcreate_async, H5Mopen_async) for use with the asynchronous I/O interface.
Previous Chapter The HDF5 Event Set Interface - Next Chapter HDF5 References
Navigate back: Main / HDF5 User Guide