Настройка SQLite
SQLite — это встраиваемая реляционная СУБД, которая хранит всю базу данных в одном файле. Она идеально подходит для:
- локальной разработки;
- автономного тестирования;
- небольших проектов без высоких нагрузок;
- быстрого прототипирования.
Благодаря файловой структуре, перенос базы данных между окружениями и создание резервных копий становится максимально простым.
Создание базы данных
Перейдите в корень вашего проекта и выполните команду:
mkdir -p database && touch database/database.sqlite
Если директория database/ отсутствует, команда создаст её автоматически.
Настройка переменных окружения
Откройте файл .env и укажите следующие параметры:
#file:.env
# Название подключения из секции connections в config/database.php
DB_CONNECTION=my-sqlite
# Абсолютный путь к файлу базы данных
DB_DATABASE=/absolute/path/to/database.sqlite
# Включает поддержку внешних ключей.
DB_FOREIGN_KEYS=true
Конфигурационный файл
В файле config/database.php в массиве connections добавьте или обновите запись:
//file:config/database.php
'my-sqlite' => [
// Драйвер SQLite
'driver' => 'sqlite',
// Путь к файлу базы данных
// database_path() — автоматически подставляет правильный путь
'database' => env('DB_DATABASE', database_path('database.sqlite')),
// Префикс таблиц
'prefix' => '',
// Добавлять ли префикс к индексам
'prefix_indexes' => true,
// Включение внешних ключей (по умолчанию включено)
'foreign_keys' => true,
// Режим синхронизации (подробнее ниже)
'synchronous' => 'NORMAL',
// Режим журналирования (подробнее ниже)
'journal_mode' => 'WAL',
// Размер кэша страниц (в КБ, отрицательное значение = КБ, положительное = страницы)
'cache_size' => -2000,
// Дополнительные PDO-опции
'options' => [
// PDO::ATTR_EMULATE_PREPARES => false,
// PDO::ATTR_PERSISTENT => true,
// PDO::SQLITE_ATTR_OPEN_FLAGS => PDO::SQLITE_OPEN_READONLY,
],
],
Режим синхронизации (synchronous)
Определяет, как часто SQLite синхронизирует данные с диском. Это компромисс между надёжностью (сохранность при сбое питания) и производительностью.
-
OFF– Синхронизация отключена (быстрый, но не надежный); -
NORMAL– Синхронизация происходит с небольшой задержкой (достаточен для большинства); -
FULL– Полная синхронизация (гарантирует сохранность данных при сбоях); -
EXTRA– Синхронизация с дополнительными проверками (самый медленный, но наиболее надёжный).
Режим журналирования (journal_mode)
Определяет, как SQLite управляет журналом транзакций (undo/redo). Влияет на производительность, многопоточность и восстановление после сбоев. Для веб-приложений предпочтительней использовал режим WAL (позволяет одновременно читать и писать).
-
DELETE– Журнал удаляется после завершения транзакции; -
TRUNCATE– Журнал усекается до нулевой длины; -
PERSIST– Журнал остаётся, но помечается как пустой; -
MEMORY– Журнал хранится в оперативной памяти; -
WAL– Журнал записывается отдельно от основной БД.
Размер кэша (cache_size)
Определяет количество страниц кэша в оперативной памяти. Влияет на скорость чтения.
// В страницах (по умолчанию 2000, что примерно 16 МБ при странице 8 КБ)
'cache_size' => 10000,
// В КБ (отрицательное значение)
'cache_size' => -20000, // 20 МБ
Для небольших БД (< 100 МБ) можно установить -20000 (20 МБ). Для больших проектов используйте 25-50% от размера БД.
Внешние ключи (foreign_keys)
Определяет, проверяются ли внешние ключи (REFERENCES). В отличие от PostgreSQL/MySQL, в SQLite эта опция отключена по умолчанию и должна быть включена явно.
В Imhotep, если параметр foreign_keys не указан или равен true – внешние ключи включаются. Чтобы отключить, нужно явно указать false.
// Включить проверку внешних ключей
'foreign_keys' => true,
// Отключить (не рекомендуется)
'foreign_keys' => false,