Featured image of post Не используйте PostgreSQL для всего! В чем преимущества встроенной архитектуры и нулевой конфигурации SQLite? Где пределы SQLite? Когда выбирать SQLite, а когда PostgreSQL?

Не используйте PostgreSQL для всего! В чем преимущества встроенной архитектуры и нулевой конфигурации SQLite? Где пределы SQLite? Когда выбирать SQLite, а когда PostgreSQL?

SQLite — самая распространенная встроенная СУБД в мире, отличающаяся одним файлом, нулевой конфигурацией и отсутствием необходимости установки сервера. Поймите ключевые архитектурные различия между SQLite и PostgreSQL, соответствующие сценарии использования и ограничения SQLite (блокировка одновременной записи, отсутствие межсерверных возможностей, отсутствие управления правами доступа).

Задумывались ли вы когда-нибудь о том, что браузер, который вы открываете каждый день, приложение для общения на телефоне и даже инструмент для заметок на компьютере скрывают одну и ту же легковесную базу данных?

Она не требует установки серверного ПО, не нуждается в настройке учетной записи или пароля и даже не требует подключения к Интернету. Это просто файл, который тихо лежит на вашем жестком диске, готовый служить вам в любое время.

Это скромное существование и есть 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. Сначала спросите себя:

“Моя база данных — это карманный блокнот или центральная телефонная станция?”

Когда ответ станет ясен, выбор определится сам собой.

Reference

All rights reserved,未經允許不得隨意轉載
Создано при помощи Hugo
Тема Stack, дизайн Jimmy