ULID нейронка
Документация: NevelLibrary.Ulid
Ключевые особенности
Unsafe, Span<T> и SIMD (если доступно) для минимизации аллокаций памяти.UseCyrillic = true). Это позволяет генерировать ULID, содержащие буквы русского алфавита.IParsable<Ulid>, ISpanParsable<Ulid>, IEquatable<Ulid>, IComparable<Ulid>, а также конвертеры для JSON (System.Text.Json) и типов.Ulid, Guid, byte[] и строковым представлением.Installation
Тип находится в пространстве имен NevelLibrary.Ulid. Убедитесь, что ваш проект ссылается на соответствующую библиотеку.
Основные свойства
MinValueUlidMaxValueUlidEmptyUlidTimeDateTimeOffsetRandomnessbyte[]Создание ULID
1. Генерация нового ULID
Метод NewUlid() создает уникальный идентификатор на основе текущего времени UTC и криптографически стойкого генератора случайных чисел (Xoshiro256).
2. Генерация с фиксированной временной меткой
Если вам нужно создать ULID с конкретной датой (например, для тестирования или восстановления порядка):
3. Генерация из Guid
Guid → Ulid меняет порядок байт и не гарантирует сохранение временной сортируемости исходного GUID.Можно преобразовать существующий Guid в Ulid:
4. Создание из массива байт
Парсинг и преобразование в строку
NevelLibrary.Ulid сериализуется в строку Base32 с использованием русского алфавита.Парсинг из строки
Преобразование в строку
Конвертация в другие форматы
В GUID
В массив байт
В Base64
Сравнение и равенство
Ulid реализует IComparable<Ulid>, что позволяет сортировать ULID по времени создания (так как timestamp находится в старших битах).
Проверка равенства
Сравнение
Интеграция с EF Core
Тип реализует интерфейс IParsable<Ulid>. Это позволяет Entity Framework Core автоматически преобразовывать строковые значения из базы данных (если столбец хранит ULID как строку) в тип Ulid.
Пример использования в модели:
JSON сериализация
Тип содержит встроенный JsonConverter (UlidJsonConverter). При использовании System.Text.Json ULID будет сериализован в строку (Base32 формат) и десериализован обратно автоматически.
Технические детали
Структура данных
Ulid имеет размер 16 байт и layout Explicit:
Xoshiro256.Алфавит Base32
По умолчанию используется следующий алфавит (кириллица):
Производительность
ArrayPool<byte> для временных буферов при конвертации в Base64.Unsafe и Span для избежания границ проверок и аллокаций.Vector128 (SIMD) для ускоренной конвертации между Guid и Ulid на поддерживаемых платформах.FAQ
NevelLibrary.Ulid установлена константа UseCyrillic = true. Это уникальная особенность данной библиотеки.Time:ЖУРНАЛ_ОБСУЖДЕНИЙ: 1
Строка не распознана: ни JSON, ни base64-контейнер ASTB
ДОСТУП_ОГРАНИЧЕН
Требуется авторизация для передачи данных в канал.