Открыть сервисСервис

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»
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru