в одном файлике. Этакий гит. Версионирование опционально - сейчас оно прикручено поверх.
Простые требования:
1. Единственный файл.
2. Поддержка сжатия.
3. Максимальная производительность чтения/записи (желательно с возможность кэширования данных в памяти).
4. Отсутствие требований помимо .NET Runtime (Windows)
Сейчас у меня самописное хранилище на базе Zip-архива + словарик в памяти. Хранятся строковые пары (key, value)
Проблема в том, что каждое сохранение ZipArchive заново генерирует хидеры для всех записей. Когда их больше 20 000, это занимает заметное время.
Я в раздумьях - пилить дальше свой велосипед, или есть что-нибудь готовое? Возможно, обвязка над SQLite + zlib будет работать быстрее и лучше?..
Мб попробуй формат не на основе архива, а просто запакованный стрим. Или даже цепочка стримов, которые просто дописываются в конец файла (и изредка перепаковываются полностью, чтобы утрясти размер).
Хорошая мысль, спасибо! Нужно будет только прилепить сбоку слияние транзакций, чтобы поддержать удаление и не растить хвост до бесконечности.
Обсуждают сегодня