Настройка SQLite

SQLite — это встраиваемая реляционная СУБД, которая хранит всю базу данных в одном файле. Она идеально подходит для:

  • локальной разработки;
  • автономного тестирования;
  • небольших проектов без высоких нагрузок;
  • быстрого прототипирования.

Благодаря файловой структуре, перенос базы данных между окружениями и создание резервных копий становится максимально простым.

Создание базы данных

Перейдите в корень вашего проекта и выполните команду:

mkdir -p database && touch database/database.sqlite
BASH

Если директория database/ отсутствует, команда создаст её автоматически.

Настройка переменных окружения

Откройте файл .env и укажите следующие параметры:

#file:.env

# Название подключения из секции connections в config/database.php
DB_CONNECTION=my-sqlite

# Абсолютный путь к файлу базы данных
DB_DATABASE=/absolute/path/to/database.sqlite

# Включает поддержку внешних ключей.
DB_FOREIGN_KEYS=true
INI

Конфигурационный файл

В файле 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,
    ],
],
PHP

Режим синхронизации (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 МБ
PHP

Для небольших БД (< 100 МБ) можно установить -20000 (20 МБ). Для больших проектов используйте 25-50% от размера БД.

Внешние ключи (foreign_keys)

Определяет, проверяются ли внешние ключи (REFERENCES). В отличие от PostgreSQL/MySQL, в SQLite эта опция отключена по умолчанию и должна быть включена явно.

В Imhotep, если параметр foreign_keys не указан или равен true – внешние ключи включаются. Чтобы отключить, нужно явно указать false.

// Включить проверку внешних ключей
'foreign_keys' => true,

// Отключить (не рекомендуется)
'foreign_keys' => false,
PHP