Об этом проекте

sled — это встраиваемая база данных, написанная на Rust, которую автор описывает как бета-программное обеспечение. Его API напоминает потокобезопасный BTreeMap<[u8], [u8]>, поэтому базовые операции вставки, получения, диапазона, удаления и сравнения-и-обмена кажутся знакомыми разработчикам Rust. Ключевые возможности, перечисленные в README, включают сериализуемые ACID-транзакции для атомарного чтения и записи нескольких ключей в нескольких keyspace, полностью атомарные операции с одним ключом, чтение с нулевым копированием, пакетную запись, подписки на изменения по префиксам ключей, несколько keyspace, merge-операторы, прямые и обратные итераторы диапазона, а также устойчивый к сбоям монотонный генератор идентификаторов. Опциональное сжатие zstd доступно за функцией сборки, отключенной по умолчанию. Реализация описывается как lock-free дерево поверх lock-free pagecache поверх lock-free журнала, с flash-оптимизированной лог-структурированной конструкцией хранения. Используются b-деревья, такие как префиксное кодирование и усечение суффиксов, для снижения затрат на хранение длинных ключей с общими префиксами. В README утверждается производительность записи, подобная LSM-деревьям, и производительность чтения, подобная традиционным B+ деревьям, и отмечается, что долговечность по умолчанию — fsync каждые 500 мс, настраивается через flush_every_ms или ручные вызовы flush/flush_async. Важные оговорки: транзакции оптимистичны, поэтому замыкания транзакций должны избегать внешнего состояния или ввода-вывода, если они не идемпотентны; sled не поддерживает несколько открытых экземпляров, поэтому он должен оставаться открытым в течение всего времени жизни процесса; числовые ключи должны храниться в big-endian для правильного лексикографического упорядочивания; и ожидается, что формат на диске изменится до версии 1.0.0, что потребует ручной миграции. В README также указано, что SQLite предпочтительнее, когда надежность является основным ограничением, RocksDB — когда важна цена за производительность хранения, а LMDB — для многопроцессных рабочих нагрузок с редкой записью. Минимальная поддерживаемая версия Rust — 1.62.