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

FrankenSQLite — это независимая реализация SQLite, написанная на Rust с нуля и нацеленная на устранение узкого места единственного писателя и проблем долговечности SQLite. Она вводит постраничный многоверсионный контроль конкурентности (MVCC), позволяющий параллельную запись и заменяющий традиционную блокировку уровня файла. Движок спроектирован с безопасным ядром на Rust, а код `unsafe` ограничен VFS и необязательной прослойкой C ABI. **Ключевые возможности:** - **Параллельные писатели:** постраничный MVCC с сериализуемой изоляцией снимков (SSI) по умолчанию, позволяющий писателям, затрагивающим разные страницы, работать параллельно. Конфликты на одной странице сейчас вызывают откат и повтор с `SQLITE_BUSY_SNAPSHOT`; безопасная лесенка слияния записи бездействует. - **Совместимость с форматом файлов:** читает и записывает стандартные базы данных SQLite 3.x, поддерживая текстовые кодировки UTF-8 и UTF-16. Проверка совместимости наиболее полна для UTF-8. - **Безопасный движок на Rust:** ядро движка, пейджер, парсер, VDBE и связанные крейты запрещают код `unsafe`, за исключением `fsqlite-vfs` (mmap/shm) и `fsqlite-c-api` (FFI). - **Слоистая архитектура:** рабочее пространство Cargo из 28 участников с крейтами для типов, ошибок, VFS, пейджера, WAL, MVCC, B-дерева, парсера, планировщика, VDBE, функций и расширений (FTS5, JSON1, R-tree, ICU и других). - **Исследования долговечности:** включает строительные блоки RaptorQ/ECS для потенциального самовосстанавливающегося хранилища, но это лишь проект и частичная реализация, пока не задействованные в режиме совместимости. - **Наблюдаемость транзакций:** интерфейсы PRAGMA для статистики транзакций, активных транзакций, предупреждений консультанта и JSON-таймлайн. **Текущий статус:** среда гибридная, рабочим путём является режим совместимости поверх стандартных файлов SQLite. Собственный режим и компоненты ECS существуют на уровне проекта и частичной реализации. CLI представляет собой небольшую оболочку, а не полноценный интерфейс sqlite3. Такие расширения, как FTS3/FTS4, реализованы только на уровне вспомогательных средств; `dbstat`, `carray` и `dbpage` не реализованы. Крейт планировщика существует, но не является основным горячим путём для всех запросов.