SQLite's File Format
Формат файла SQLite
SQLite хранит всё состояние БД в одном файле.
Размер страницы — степень двойки 512–65 536 байт; номера страниц начинаются с 1, максимум 2³²-2.
Первая страница (512–100 байт) — заголовок:
- 16 байт: «SQLite format 3\000»
- 2 байт: размер страницы
- 1 байт: версия формата, 1 байт: версия для записи
- 1 байт: резервировано под расширения
- 1 байт: макс. доля переполнения
- 4 байт: счётчик изменений
- 4 байт: размер БД (страниц)
- 4 байт: свободные страницы
- 4 байт: схема-cookie
- 4 байт: формат схемы
- 4 байт: рекомендованный кэш
- 4 байт: vacuum-настройки
- 4 байт: кодировка текста
- 4 байт: пользовательская версия
- 4 байт: ID приложения
- 4 байт: версия библиотеки, 4 байт: «valid-for»
- 20 байт: резерв
Страницы бывают:
- b-tree (таблица/индекс, внутр./лист)
- freelist (trunk/leaf)
- переполнение payload
- pointer-map (ptrmap)
Схема
SQL-таблицы → b-tree, строки — последовательность записей (varint длина + payload).
WITHOUT ROWID → ключ в b-tree, дубли в PK убираются.
Индексы → отдельный b-tree, ключи с rowid.
Системные таблицы: sqlite_master (DDL), sqlite_sequence, sqlite_stat1-4.
Журналы
Rollback-journal: старая страница + заголовок.
WAL: кадры с новыми страницами, контрольная сумма, индекс в памяти.