Proprietary Storage

Axigen Documentation

Updated: October 20, 2021

The Axigen mail server solution offers a proprietary storage system. The Axigen Storage is a specific file structure with index-based access that allows fast email delivery, retrieval, and query.

The Axigen Storage checks the consistency of stored messages and empties the queue only if the mail message is correctly stored.

Besides messages, the Axigen Storage system also stores all domain and user configuration settings.

Overview of the Axigen Storage

Each Axigen storage is defined by three elements:

  • Storage directory: the directory where all storage file will be created;

  • Max. file size: maximum size of a data file (Storage Container). The default value is 1 GB;

  • Max. files: maximum number of files. The default value is 128 files.

Therefore the maximum capacity of each storage is Max. file size * Max. files and the default capacity is 128 GB.

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 a unique ID of the storage and the relation with other stores 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 Message Storage Containers

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, mailing lists, forwarders, etc) are stored;

  • one storage for domain objects configuration, where all domain objects configurations and folders are stored;

  • one or more storage containers for messages, where all mails and other data associated with those emails are stored; it is recommended to define each message storage on a different physical disk, since Axigen will use these storage containers in parallel.

Due to the arrangement of the records from the domain and object storages, the configuration should allow some room for expansion (i.e. free space) in each individual container from the domain and object storages.

When a storage container approaches its maximum size, (defined by the "Max. file size" parameter), another one 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 4GB). 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.

Message Storage 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.

  • Indexed data structure – this ensures an optimal balance between the space used for storing indexes and the time to access information by introducing multiple levels of indexes depending on how often information is accessed.

  • Transactional access – Axigen provides structural integrity for the stored information by performing transactional data access.

  • Expandable storage – you can add subsequent storage units to one domain, thus increasing the available space.

  • Deduplication / single storage of emails with multiple recipients – only one copy of a message received by multiple recipients is stored (particularly useful for distribution lists and groups).

  • Repairing corrupted accounts – if an account’s data becomes corrupted (due to, for instance, disk failure), Axigen allows you to attempt account data recovery.

  • Storage overload prevention – overload prevention is ensured by limiting allowed message sizes according to specific policies based on multiple message or connection parameters.