SQLite
Что это такое
SQLite — это автономная, бессерверная реляционная база данных, которая хранит всю базу данных в одном файле. Нет отдельного процесса, который нужно запускать или администрировать; ваше приложение напрямую подключает библиотеку и читает и записывает этот файл. Это самая широко используемая база данных в мире — она встроена в телефоны, браузеры и бесчисленное множество приложений.
Сильные стороны
- Нулевая конфигурация и отсутствие сервера, который нужно обслуживать.
- Вся база данных — это один переносимый файл, который легко скопировать или сохранить в резервную копию.
- Высокая скорость локального чтения и умеренных нагрузок на запись.
- Полная поддержка SQL с транзакциями и внешними ключами.
- Отлично подходит для тестов, прототипов, edge-сред выполнения и встраиваемого использования.
Компромиссы
- Ограниченная конкурентная запись (один писатель за раз; режим WAL помогает).
- Не предназначена для большого числа сетевых клиентов или высокой пропускной способности записи.
- Меньше продвинутых типов и нет встроенной системы пользователей и прав.
- Масштабирование за пределы одного хоста требует другого хранилища или слоя вроде Turso/LiteFS.
Когда использовать
Используйте SQLite для локальных приложений, инструментов командной строки, десктопного и мобильного ПО, наборов тестов и небольших и средних сайтов, где преобладает чтение. Она также всё чаще оказывается жизнеспособной на edge благодаря размещённым репликам.
Подходит для вайб-кодинга
Направляя ИИ, попросите его сначала включить безопасные настройки по умолчанию: включить PRAGMA foreign_keys = ON и журналирование WAL, поскольку SQLite по умолчанию оставляет внешние ключи выключенными. Пусть он использует параметризованные запросы и хранит миграции схемы в версионируемых файлах .sql. Полезный совет: скажите ИИ, что записи сериализуются, поэтому ему следует группировать вставки в одной транзакции и избегать долгих блокировок записи. Поскольку база данных — это просто файл, попросите ИИ добавить в ваш инструментарий простой шаг резервного копирования (копирование файла или команда .backup).
PRAGMA journal_mode = WAL;
PRAGMA foreign_keys = ON;
CREATE TABLE notes (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
body TEXT,
created_at TEXT NOT NULL DEFAULT (datetime('now'))
);
-- Группируйте множество вставок в одной транзакции для скорости
BEGIN;
INSERT INTO notes (title, body) VALUES (?, ?);
INSERT INTO notes (title, body) VALUES (?, ?);
COMMIT;