File-Based Session Storage
File-Based Session Storage keeps incoming and outgoing messages and session's state data in files in the StorageDirectory folder.
For each iLink 3 session, the following files are created:
SESSION_NAME.state
contains session state data (Uuid, Negotiated, InSeqNum, OutSeqNum, PreviousSeqNo, PreviousUuid, etc.).SESSION_NAME.summary
contains Base64 encoded binary SBE messages.
SESSION_NAME
is formed on the base of Uuid, Firm, MarketSegmentId
,
and a timestamp. It is available via the StorageId property.
Segmented File-Based Storage
Sometimes it is needed to save space on disk, and there is no need to keep the whole history of incoming and
outgoing messages.
File-Based Storage could be configured to store messages in a set of .summary
files, instead of a single one.
The entire collection of logged messages is split through several files called "segments", and older segments could
be archived.
The Segmented mode of the File-based Storage is activated when the FileBasedStorageSegmentSize is set to a positive value.
Segments are named as StorageID[-part-N].summary
, where:
StorageID
- the generic ID of storage (available via the StorageId property);-part-N
- the segment suffix. TheN
is the 1-based number of segments. One segment does not have this suffix - it is the segment where the newest messages are stored.
During the session lifetime, new segment files are created per the following algorithm:
- A new message is saved to the
StorageID.summary
file; - When the message is saved, the
StorageID.summary
file size is compared to the FileBasedStorageSegmentSize value, and if the actual file size exceeds this value, a new segment is created; - To create a new segment, the Handler renames
StorageID.summary
toStorageID-part-N.summary
and creates a new emptyStorageID.summary
file to store subsequent messages. TheN
is a sequential number of parts starting from1
.
So during a long session, a set of files could be created: StorageID.summary
, StorageID-part-1.summary
,
StorageID-part-2.summary
, etc. . Oldest messages are stored in the StorageID-part-1.summary
file,
and newer ones - in the StorageID.summary
and StorageID-part-N.summary
files, where N
is the maximum value.
The number of segments is recorded in the StorageID.state
file after the FilePartCount
key.
For instance, if there are 5
segments,
(StorageID.summary
, StorageID-part-1.summary
, ... , StorageID-part-4.summary
)
the following line will be stored in the StorageID.state
file:
FilePartCount=5
Examples
File-Based Storage without segmentation
SessionSettings settings = new ();
using Session session = new(settings, marketSegmentId, SessionStorageType.FileBasedStorage);
Segmented storage
SessionSettings settings = new()
{
FileBasedStorageSegmentSize = 256 * 1024
};
using Session session = new (settings, marketSegmentId, SessionStorageType.FileBasedStorage);