Inside the storage directory, a list of files, named with 2 hexa digits followed by the .hsf
extension – e.g. 2A.hsf
– are created. There is also a file named hsf.dat
, which contains an unique ID of the storage and the relation with other storages of the same domain. This information is useful in case some of the storage directories are moved to other locations.
Another feature of the Axigen storage is that it supports transactions, so that some critical operations of domain configuration changes are made safely.
Filling the Containers
When a storage container approaches its maximum size, (defined by the Max. file size parameter), another storage container will be created and the new messages will be stored herein. If the number of storage containers reaches the maximum value (defined by the Max. files parameter) and all of them have reached the maximum size, the storage is considered full and no more messages will be inserted.
The data in the storage containers is written in blocks of 4KB, therefore usually the files size is a multiple of 4KB. These memory blocks are called nodes. Smaller blocks of memory are also available, for message parts smaller than 4KB. These smaller blocks are called formatted nodes.
Each storage file can contain a maximum of 16 millions messages, and the maximum theoretical file size is 64GB (some limitations might apply, depending on your system configuration; currently Axigen limits this maximum size to 2GB). There can be maximum 128 files in one storage, and one domain can have over 4 billion message storages defined.
The actual maximum capacity in terms of total message count and size depends on the specific messages in the storage. For more details, see Domains section.
For each domain, at least three storages are used:
-
one storage for domain configuration, where all domain specific configuration, the public folder and the list of domain objects (users, maillist, forwarders, etc.) are stored;
-
one storage for domain objects configuration, where all domain objects configurations and folders are stored;
-
one or more storages for messages, where all mails and other data associated with mails are stored; it is recommended to define each message storage on a different physical disk, since Axigen will use these storages in parallel.
Space Saving Filling Procedure
The storage files with more free space have a priority when it comes to selecting the files in which a new message is added. The usage of the free space is also enhanced by message deletion.
Each message in a storage file is identified by a pointerID
(type UINT
). The information related to these pointers-to-messages is stored in the same storage file.