SequentialGuidProvider

SequentialGuidProvider provides functionality for server side generation sequential GUID (COMB GUID).

Setup

The basic setup is:

services.AddSequentialGuidProvider();

AddSequentialGuidProvider extension method performs registration of SequentialGuidProvider with specified settings.

Parameter nameParameter typeDescription

initializer

SequentialGuidInitializer

Initializer which returns GUID to combine with timestamp. Default value is Guid.NewGuid.

timestampProvider

SequentialGuidTimestampProvider

Timestamp provider for generating COMB GUID.

Usage

Inject ISequentialGuidProvider service and use it:

public class FileService : ICustomService
{
    private readonly ISequentialGuidProvider _sequentialGuidProvider;

    public FileService(ISequentialGuidProvider _sequentialGuidProvider)
        => _sequentialGuidProvider = _sequentialGuidProvider;

    public void Upload()
    {
        Guid fileId = _sequentialGuidProvider.GetSequentialGuid(SequentialGuidType.String);
    }
}

ITimestampProvider methods list:

Method nameReturn typeDescription

GetSequentialGuid

Guid

Generate new sequential GUID.

GetSequentialGuid method generating sequential GUID with following types:

String

SequentialGuidType.String - The first six bytes are in sequential order, and the remainder is random. Inserting these values into a database that stores GUIDs as strings (such as MySQL) should provide a performance gain over non-sequential values. This type should be used with MySQL or PostgreSQL database.

Binary

SequentialGuidType.Binary - The first two blocks are "jumbled" due to having all their bytes reversed (this is due to the endianness issue discussed earlier). If we were to insert these values into a text field (like they would be under MySQL or PostgreSQL), the performance would not be ideal. This type should be used with Oracle database.

Ending

SequentialGuidType.Ending - The last six bytes are in sequential order, and the rest is random. This type should be used with MS SQL Server database.

Last updated