Skip to content
Maarten Hilferink edited this page Dec 8, 2025 · 5 revisions

The MMD format is a new storage type developed as the successor to the fss storage. It uses memory-mapped files, which makes it significantly faster than any other storage currently available. An MMD file includes metadata about the value type of each attribute and can optionally auto-declare these attributes in your configuration when reading the file.

Compared to fss, the MMD format consolidates data into one or two files per attribute, instead of producing a separate file for each tile. This avoids the creation of thousands of small files for large datasets and improves both file-system efficiency and loading performance.

Writing an MMD file can work the same way as writing a shapefile: you export a unit to disk. Reading an MMD file follows the same pattern and integrates seamlessly into existing workflows.

unit<uint64> store_mmd := Result
,	StorageName = "somestoragename.mmd"
{
	attribute<string>                                   OrgName                     := Result/OrgName;
	attribute<string>                                   DestName                    := Result/DestName;
	attribute<s>                                        Traveltime                  := Result/Traveltime;
	attribute<ct>                                       Price                       := Result/Price;
	attribute<ct>                                       Price_augm                  := Result/Price_augm;
	attribute<string>                                   ModeUsed                    := Result/ModeUsed;
	attribute<dam>                                      TravelDist_Bus              := Result/TravelDist_Bus;
	attribute<dam>                                      Traveldist_Metro            := Result/Traveldist_Metro;
	attribute<dam>                                      Traveldist_Tram             := Result/Traveldist_Tram;
	attribute<dam>                                      Traveldist_Rail             := Result/Traveldist_Rail;
	attribute<dam>                                      Traveldist_Ferry            := Result/Traveldist_Ferry;
	attribute<s>                                        W_time                      := Result/W_time, Descr = "Waiting at home";
	attribute<s>                                        V_time                      := Result/V_time;
	attribute<s>                                        PT_time                     := Result/PT_time;
	attribute<s>                                        N_time                      := Result/N_time;
}
unit<uint64> read_mmd
: StorageName = "somestoragename.mmd"
, StorageReadOnly = "true"
{

}

However, an MMD storage can also store multiple tables and attributes with different domains. Domains can be stored in the MMD, as shown in the example above, or be defined elsewhere and reused when reading the MMD data. When domains are stored in the MMD and then read back, they are unrelated to the original domain. When defined elsewhere, the user is responsible for not changing the domain between producing the MMD and using it.

Furthermore, the user is responsible for first producing MMD data before using it.

since

The format was available as early as 2024, but its initial problems have been resolved in version 18.1.2.

Clone this wiki locally