Задумывались ли вы когда-нибудь о том, что браузер, который вы открываете каждый день, приложение для общения на телефоне и даже инструмент для заметок на компьютере скрывают одну и ту же легковесную базу данных?
Она не требует установки серверного ПО, не нуждается в настройке учетной записи или пароля и даже не требует подключения к Интернету. Это просто файл, который тихо лежит на вашем жестком диске, готовый служить вам в любое время.
Это скромное существование и есть SQLite.
Что такое SQLite? Самая распространенная база данных в мире
SQLite — это встроенный движок реляционной базы данных, написанный на C.
У нее нет независимого серверного процесса, она встраивается непосредственно в ваше приложение для работы.
Это совершенно отличается от привычных вам PostgreSQL или MySQL. Традиционные базы данных — это независимые серверы, которые работают отдельно, и ваша программа должна “общаться” с ними по сетевому протоколу (TCP/IP).
But SQLite устроена иначе; это просто блок кода, работающий прямо внутри вашего приложения, который читает и записывает файл .db на вашем жестком диске.
| Параметр сравнения | SQLite (Встроенная) | PostgreSQL (Клиент-Сервер) |
|---|---|---|
| Режим работы | Встроена прямо в приложение, без отдельного сервера | Независимый серверный процесс, через сетевое подключение |
| Конфигурация | Нулевая конфигурация, без установки и учетных записей | Требует установки, настройки учетной записи/пароля и файрвола |
| Хранение данных | Один кроссплатформенный файл | Множество файлов в директории сервера |
| Резервное копирование | Прямое копирование этого файла | Требует специальных инструментов, таких как pg_dump |
Именно благодаря этой особенности “подключи и работай” SQLite стала самым распространенным движком баз данных в мире.
От операционных систем Android и iOS, браузеров Chrome и Firefox до Adobe Lightroom, WhatsApp и даже авиационной системы Airbus A350 — она присутствует везде.
Использование SQLite in Node.js
Если вы являетесь Node.js-разработчиком, использовать SQLite чрезвычайно просто. Вам не нужно устанавливать серверное ПО базы данных на свой компьютер, достаточно просто установить npm-пакет для начала работы.
Наиболее часто используемые варианты в индустрии сегодня:
| Название пакета | Особенности | Рекомендуемый сценарий |
|---|---|---|
sqlite3 |
Самый старый, поддерживает асинхронные API | Когда нужно обрабатывать много асинхронных задач одновременно |
better-sqlite3 |
Отличная производительность, интуитивный API, очень быстрый | Главная рекомендация для эффективности разработки и скорости работы |
Создание базы данных и выполнение запросов с помощью better-sqlite3 занимает меньше пяти минут:
const Database = require('better-sqlite3');
const db = new Database('my_project.db');
db.prepare('CREATE TABLE IF NOT EXISTS users (name TEXT, age INTEGER)').run();
const insert = db.prepare('INSERT INTO users (name, age) VALUES (?, ?)');
insert.run('John', 25);
const user = db.prepare('SELECT * FROM users WHERE name = ?').get('John');
console.log(user); // { name: 'John', age: 25 }
Если файл не существует,
better-sqlite3создаст его автоматически.
SQLite поддерживает более мощный SQL-синтаксис, чем вы думаете
Многие думают, что SQLite очень проста, но она поддерживает подавляющее большинство стандартов SQL-синтаксиса, включая множество продвинутых функций:
| Категория синтаксиса | Поддерживаемые элементы |
|---|---|
| Базовые операции | SELECT, INSERT, UPDATE, DELETE |
| Определение данных | CREATE TABLE, CREATE INDEX, CREATE VIEW |
| Сложные запросы | WITH (рекурсивные CTE), оконные функции (Window Functions) |
| Обработка конфликтов | UPSERT (INSERT ... ON CONFLICT DO UPDATE) |
| Обработка JSON | Встроенные функции, такие как json_extract, json_array, json_object и др. |
| Управление транзакциями | BEGIN, COMMIT, ROLLBACK, SAVEPOINT |
| Запросы слияния | INNER JOIN, LEFT JOIN, RIGHT JOIN и FULL OUTER JOIN |
Основная философия SQLite — “мало и изящно”, она поддерживает большинство возможностей SQL, необходимых каждый день, оставаясь при этом невероятно легкой.
Где пределы SQLite?
Легкость имеет свою цену. Если сравнить SQLite со стильным фермерским магазинчиком с одной кассой, то PostgreSQL — это Costco с 50 кассами.
1. Пробки при записи данных
Когда SQLite записывает данные, она блокирует весь файл базы данных.
Представьте ресторан с одним туалетом: 100 человек могут одновременно изучать меню снаружи (читать), но как только 1 человек заходит внутрь и запирает дверь (запись), все остальные могут только стоять в очереди и ждать.
Хотя включение режима WAL (Write-Ahead Logging) может улучшить производительность одновременного чтения/записи, фундаментально запись в разные строки данных несколькими потоками одновременно остается невозможной.
2. Не может работать на нескольких серверах
Суть SQLite — это физический файл. Если ваша система развернута на нескольких серверах (горизонтальное масштабирование), эти серверы не могут безопасно использовать один и тот же файл совместно.
3. Отсутствие детального управления правами доступа
В SQLite нет понятия “учетных записей пользователей”. Любой, кто может прочитать файл .db на уровне операционной системы, может просматривать и изменять все данные.
Для бизнес-систем, требующих строгого аудита личных данных, это абсолютно неприемлемо.
SQLite vs. PostgreSQL: Принятие технологического решения
Нет плохих или хороших инструментов, есть только подходящие или нет. Вот окончательный контрольный список, который поможет вам определиться:
| Вопрос | Ответ “Да” → Выбирайте SQLite | Ответ “Нет” → Выбирайте PostgreSQL |
|---|---|---|
| Имеется только один бэкенд-сервер или запуск полностью локальный? | Да | Нет (требуется горизонтальное масштабирование, много серверов) |
| Поведение системы в основном ориентировано на чтение без частой одновременной записи? | Да | Нет (пользователи будут конкурировать за одновременную запись) |
| Не требуются детальные права доступа к БД или продвинутое индексирование? | Да | Нет (сильно зависит от продвинутых функций) |
Сравнение более конкретных сценариев:
| Сценарий | Рекомендуемый выбор | Причина |
|---|---|---|
| Настольное ПО, мобильные приложения, IoT-устройства | SQLite | Данные перемещаются с устройством, без установки |
| Личные блоги, сайты-визитки | SQLite | Много чтения, мало записи, экономия на обслуживании сервера |
| Быстрое создание прототипов, демо | SQLite | Просто создайте файл, чтобы начать |
| Форумы сообществ, платформы электронной коммерции | PostgreSQL | Высокая частота одновременной записи, нужна блокировка строк |
| Распределенное развертывание на нескольких серверах | PostgreSQL | Необходимо совместно использовать данные на разных машинах |
| Высокочувствительные системы (медицина, финансы) | PostgreSQL | Требуется строгий ролевой контроль доступа |
Ваша база данных — это карманный блокнот или центральная телефонная станция?
Если данные представляют собой “один компьютер, статика, один владелец”, выбирайте SQLite для максимальной легкости и свободы;
Если данные — это “облако, динамика, высокая интерактивность”, пусть управление возьмет на себя PostgreSQL.
Основная философия SQLite — “внутренний компонент приложения”, в то время как PostgreSQL позиционируется как “независимый центр системной архитектуры”.
В следующий раз, принимая архитектурное решение, не спешите доставать PostgreSQL. Сначала спросите себя:
“Моя база данных — это карманный блокнот или центральная телефонная станция?”
Когда ответ станет ясен, выбор определится сам собой.