SQLite — встраиваемая реляционная СУБД¶
SQLite — это встраиваемая реляционная система управления базами данных (СУБД), реализующая сервер без выделенного процесса: библиотека подключается напрямую к приложению и работает с файлом базы данных на диске. SQLite является одним из самых распространённых программных продуктов в мире — её код встроен в миллиарды устройств и программ, включая операционные системы, браузеры и мобильные платформы.
¶Общие сведения
SQLite разрабатывается с 2000 года Д. Ричардом Хиппом (D. Richard Hipp) и распространяется по общественной лицензии вида public domain — то есть без каких-либо ограничений на использование. Основная особенность архитектуры — отсутствие отдельного серверного процесса: приложение обращается к базе данных через обычные вызовы функций библиотеки. Вся база хранится в одном файле на файловой системе, что упрощает перенос, резервное копирование и развёртывание.
SQLite не является клиент-серверной СУБД вроде PostgreSQL или MySQL: несколько процессов могут работать с одним файлом, но в рамках одной машины. Для доступа из разных хостов требуется дополнительное программное обеспечение.
¶История
Разработка началась в 2000 году в рамках проекта General Dynamics для кораблей ВМС США: требовалась СУБД, работающая без администрирования и сетевых зависимостей. Первый публичный релиз вышел в августе 2000 года. Название «SQLite» отражает идею языка запросов SQL в формате «S» (Simple) — «простой SQL».
В 2011 году Apple включила SQLite в состав macOS, а в 2010-х — в iOS. Сегодня SQLite поставляется в составе Android, Windows 10 и позднейших версий, в Mozilla Firefox, Google Chrome, Safari и множестве других программ. По оценке разработчиков, SQLite установлен на большем числе устройств, чем все остальные СУБД вместе взятые.
¶Технические особенности
¶Формат хранения
База данных SQLite представляет собой один файл с расширением .db или .sqlite (расширение необязательно). Внутри файла хранятся таблицы, индексы, представления и журналы транзакций. Формат файла документирован и стабилен: версии SQLite читаются файлы, созданные более ранними версиями.
¶Типы данных
SQLite использует динамическую типизацию: тип присваивается значению, а не столбцу. Столбец может содержать значения разных типов. Тем не менее в определении столбца указывается тип (например INTEGER, TEXT, BLOB), и SQLite применяет правила «соответствия типов» (type affinity) для приведения значений.
¶Транзакции и надёжность
SQLite поддерживает ACID-транзакции. Для обеспечения целостности при сбое питания используется журнал Write-Ahead Logging (WAL) или классический rollback-журнал. По умолчанию запись выполняется после подтверждения (COMMIT), при этом SQLite гарантирует сохранность данных даже при внезапном отключении питания.
¶Ограничения
Документированные ограничения включают:
- максимальный размер базы данных — 281 ТБ;
- максимальный размер строки — 1 ГБ;
- одновременная блокировка всей базы на запись (нет механизма попутной записи на уровне строк, как в серверных СУБД);
- отсутствие пользовательского управления доступом на уровне базы — все процессы с доступом к файлу имеют одинаковые права.
¶Применение
SQLite широко используется в качестве локального хранилища данных:
- Мобильные приложения — стандартное хранилище в iOS (через Core Data) и Android (через Room).
- Веб-браузеры — хранение истории, закладок, настроек (Firefox, Chrome, Safari).
- Операционные системы — компоненты Windows, macOS, Ubuntu.
- Встраиваемые системы — телевизоры, роутеры, промышленные контроллеры.
- Настольные приложения — конфигурации, локальные кэши, прототипы.
- Серверные сценарии — небольшие сайты, прототипирование, edge-вычисления.
¶Критика и ограничения
Основное ограничение SQLite — отсутствие сетевого доступа и слабая поддержка конкурентной записи. При большом числе одновременных пишущих процессов производительность падает, так как блокируется весь файл. Для многопользовательских веб-приложений с интенсивной записью рекомендуются PostgreSQL, MySQL или MariaDB.
Также критикуется динамическая типизация: ошибки в определении типов столбцов не выявляются на этапе компиляции, что может приводить к неожиданному поведению приложения.
¶Интересные факты
Исходный код SQLite написан на языке C и составляет около 150 000 строк. Для него существует специальный тестовый набор, насчитывающий более миллиарда тестовых случаев — это один из наиболее тщательно протестированных программных проектов в мире. SQLite распространяется в общественном достоянии, что позволяет использовать её без лицензионных платежей даже в закрытых коммерческих продуктах.
¶Источники
- Официальный сайт проекта SQLite (sqlite.org)
- Documentation: About SQLite
- Документация формата файла SQLite
- D. Richard Hipp, «History of SQLite»
