Разработчик(и) | Д. Ричард Хипп |
---|---|
Первоначальный выпуск | 17 августа 2000 г. ( 2000-08-17 ) |
Стабильный релиз | 3.48.0 [1] (14 января 2025 г. [±] ( 14 января 2025 г. ) | )
Репозиторий |
|
Написано в | С |
Операционная система | Кроссплатформенный |
Размер | 699 КБ |
Тип | СУРБД ( встроенная ) |
Лицензия | Общественное достояние [2] |
Веб-сайт | sqlite.org |
Расширение имени файла | .sqlite, .sqlite3, .db, .db3, .s3db, .sl3 |
---|---|
Тип интернет-СМИ | application/vnd.sqlite3 [3] |
Магическое число | 53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 00 ( ASCII с завершающим нулем "SQLite format 3") |
Первоначальный выпуск | 2004-06-18 |
Открытый формат ? | да ( общественное достояние ) |
Веб-сайт | sqlite.org/fileformat.html |
SQLite ( / ˌ ɛ s ˌ k juː ˌ ɛ l ˈ aɪ t / , [4] [5] / ˈ s iː k w ə ˌ l aɪ t / [6] ) — это бесплатная реляционная СУБД с открытым исходным кодом , написанная на языке программирования C. Это не отдельное приложение; скорее, это библиотека , которую разработчики программного обеспечения встраивают в свои приложения . Как таковая, она принадлежит к семейству встроенных баз данных . Это наиболее широко используемая СУБД, поскольку она используется несколькими ведущими веб-браузерами , операционными системами , мобильными телефонами и другими встроенными системами . [7]
Многие языки программирования имеют привязки к библиотеке SQLite. Она, как правило, следует синтаксису PostgreSQL , но не обеспечивает проверку типов по умолчанию. [8] [9] Это означает, что можно, например, вставить строку в столбец, определенный как целое число. Хотя это облегченная встроенная база данных, SQLite реализует большую часть стандарта SQL и реляционной модели , включая транзакции и гарантии ACID . [10] Однако в ней отсутствуют многие функции, реализованные другими базами данных, такие как материализованные представления и полная поддержка триггеров и операторов ALTER TABLE . [11]
D. Richard Hipp разработал SQLite весной 2000 года, работая в General Dynamics по контракту с ВМС США . [12] Hipp разрабатывал программное обеспечение, используемое для системы контроля повреждений на борту эсминцев с управляемыми ракетами ; система контроля повреждений изначально использовала HP-UX с серверной частью базы данных Informix . SQLite начинался как расширение Tcl . [13]
В августе 2000 года была выпущена версия 1.0 SQLite с хранилищем на основе gdbm (GNU Database Manager). В сентябре 2001 года SQLite 2.0 заменил gdbm на пользовательскую реализацию B-дерева , добавив возможность транзакций . В июне 2004 года SQLite 3.0 добавил интернационализацию , типизацию манифеста и другие важные улучшения, частично финансируемые America Online . В 2011 году Хипп объявил о своих планах добавить интерфейс NoSQL в SQLite, а также анонсировал UnQL, функциональное надмножество SQL, разработанное для документно-ориентированных баз данных . [14]
В 2018 году SQLite приняла Кодекс поведения , поскольку некоторые клиенты не стали бы использовать программное обеспечение без него. [15] [16] Он был основан на Правиле Святого Бенедикта и был спорным из-за своей религиозной природы. Позднее документ был переименован в Кодекс этики. [17]
SQLite — один из четырех форматов, рекомендованных для долгосрочного хранения наборов данных , одобренных для использования Библиотекой Конгресса . [18] [19] [20]
SQLite был разработан, чтобы позволить программе работать без установки системы управления базами данных или необходимости администратора базы данных . В отличие от клиент-серверных систем управления базами данных, движок SQLite не имеет автономных процессов, с которыми взаимодействует прикладная программа. Вместо этого компоновщик интегрирует библиотеку SQLite — статически или динамически — в прикладную программу, которая использует функциональность SQLite через простые вызовы функций , сокращая задержку в операциях с базой данных; для простых запросов с небольшим параллелизмом производительность SQLite выигрывает за счет избежания накладных расходов на межпроцессное взаимодействие .
Из-за бессерверной конструкции приложения SQLite требуют меньше настроек, чем клиент-серверные базы данных. SQLite называется нулевой конфигурацией [21], поскольку такие задачи настройки, как управление службами, сценарии запуска и управление доступом на основе пароля или GRANT , не нужны. Управление доступом осуществляется через разрешения файловой системы файла базы данных. [22] Базы данных в клиент-серверных системах используют разрешения файловой системы , которые предоставляют доступ к файлам базы данных только процессу- демону , который обрабатывает свои блокировки внутренне, позволяя выполнять одновременную запись из нескольких процессов.
SQLite хранит всю базу данных, состоящую из определений, таблиц , индексов и данных, как один кроссплатформенный файл, что позволяет нескольким процессам или потокам получать доступ к одной и той же базе данных одновременно. Он реализует эту простую конструкцию, блокируя файл базы данных во время записи. [22] Доступ к записи может завершиться ошибкой с кодом ошибки или может быть повторен до истечения настраиваемого тайм-аута. Операции чтения SQLite могут быть многозадачными , хотя из-за бессерверной конструкции запись может выполняться только последовательно. Это ограничение на параллельный доступ не применяется к временным таблицам и смягчено в версии 3.7, поскольку опережающее ведение журнала (WAL) обеспечивает одновременное чтение и запись. [23] Поскольку SQLite приходится полагаться на блокировки файловой системы, он не является предпочтительным выбором для развертываний с интенсивной записью. [24]
SQLite использует PostgreSQL в качестве справочной платформы. «Что бы сделал PostgreSQL» используется для понимания стандарта SQL. [25] [26] Одним из основных отклонений является то, что, за исключением первичных ключей , SQLite не обеспечивает проверку типов ; тип значения является динамическим и не ограничивается строго схемой ( хотя схема вызовет преобразование при сохранении, если такое преобразование потенциально обратимо). SQLite стремится следовать правилу Постела . [27]
SQLite реализует большую часть стандарта SQL-92 для SQL, но не имеет некоторых функций. Например, он только частично предоставляет триггеры и не может записывать в представления (однако, он предоставляет триггеры INSTEAD OF, которые предоставляют эту функциональность). Его поддержка операторов ALTER TABLE ограничена. [28]
SQLite использует необычную систему типов для SQL-совместимой СУБД: вместо назначения типа столбцу, как в большинстве систем баз данных SQL, типы назначаются отдельным значениям; в терминах языка он динамически типизирован . Более того, он слабо типизирован некоторыми из тех же способов, что и Perl : можно вставить строку в целочисленный столбец (хотя SQLite сначала попытается преобразовать строку в целое число, если предпочтительный тип столбца — целое число). Это добавляет гибкости столбцам, особенно при привязке к динамически типизированному языку сценариев. Однако этот метод непереносим на другие продукты SQL. Распространенной критикой является то, что в системе типов SQLite отсутствует механизм целостности данных , предоставляемый статически типизированными столбцами, хотя его можно эмулировать с помощью ограничений, таких как . [12] В 2021 году поддержка статической типизации была добавлена через таблицы STRICT, которые обеспечивают ограничения типов данных для столбцов. [29]CHECK(typeof(x)='integer')
Таблицы обычно включают скрытый столбец индекса rowid , который обеспечивает более быстрый доступ. [30] Если таблица включает столбец INTEGER PRIMARY KEY, SQLite обычно оптимизирует его, рассматривая его как псевдоним для rowid , в результате чего содержимое сохраняется как строго типизированное 64-битное знаковое целое число и его поведение изменяется на нечто похожее на автоинкрементный столбец. SQLite включает возможность создания таблицы без столбца rowid, что может сэкономить дисковое пространство и повысить скорость поиска. Таблицы WITHOUT ROWID должны иметь первичный ключ. [31]
SQLite поддерживает ограничения внешнего ключа, [32] [33], хотя они отключены по умолчанию и должны быть включены вручную с помощью оператора PRAGMA. [34]
Хранимые процедуры не поддерживаются; это явный выбор разработчиков в пользу простоты, поскольку типичный вариант использования SQLite — встраивание в хост-приложение, которое может определять собственные процедуры вокруг базы данных. [35]
SQLite не имеет полной поддержки Unicode по умолчанию для обратной совместимости и из-за размера таблиц Unicode, которые больше, чем библиотека SQLite. [36] Полная поддержка преобразований регистра Unicode может быть включена с помощью дополнительного расширения. [37]
SQLite поддерживает полнотекстовый поиск с помощью загружаемого расширения FTS5, что позволяет пользователям эффективно искать ключевое слово в большом количестве документов, подобно тому, как поисковые системы ищут веб-страницы. [38]
SQLite включает поддержку работы с JSON через расширение json1 , которое включено по умолчанию с 2021 года. Функции JSON SQLite могут обрабатывать синтаксис JSON5 с 2023 года. В 2024 году SQLite добавила поддержку JSONB, двоичной сериализации внутреннего представления JSON SQLite. Использование JSONB позволяет приложениям избегать необходимости анализировать текст JSON каждый раз при его обработке и экономит небольшой объем дискового пространства. [39]
Максимальный поддерживаемый размер файла базы данных SQLite составляет 281 терабайт. [40]
Код SQLite размещается в Fossil , распределенной системе управления версиями , которая использует SQLite в качестве локального кэша для своего формата нереляционной базы данных и SQL SQLite в качестве языка реализации. [41] [42]
SQLite является общественным достоянием , но не «открытым вкладом», при этом на веб-сайте указано, что «проект не принимает патчи от людей, которые не предоставили заявление о передаче своего вклада в общественное достояние». [43] Вместо кодекса поведения основатели приняли кодекс этики, основанный на правиле Святого Бенедикта . [44]
В дистрибутиве SQLite предусмотрена отдельная программа командной строки sqlite3 [ 45] . Она может использоваться для создания базы данных, определения таблиц, вставки и изменения строк, выполнения запросов и управления файлом базы данных SQLite. Она также служит примером для написания приложений, использующих библиотеку SQLite.
SQLite использует автоматизированное регрессионное тестирование перед каждым релизом. Более 2 миллионов тестов запускаются как часть проверки релиза. Библиотека SQLite имеет 156 000 строк исходного кода, в то время как все тестовые наборы в совокупности составляют до 92 миллионов строк тестового кода. Тесты SQLite имитируют ряд исключительных сценариев, таких как отключение питания и ошибки ввода-вывода, в дополнение к тестированию функциональности библиотеки. Начиная с выпуска SQLite 3.6.17 от 10 августа 2009 года, релизы SQLite имеют 100% покрытие тестами ветвей, один из компонентов покрытия кода . SQLite имеет четыре различных тестовых комплекта : оригинальные общедоступные тесты TCL, фирменный тестовый набор TH3 на языке C, логические тесты SQL, которые проверяют SQLite на соответствие другим базам данных SQL, и фирменный движок фаззинга dbsqlfuzz . [46]
SQLite по умолчанию включен в: [13]
Как произносится название продукта? Я говорю SQL-ite, как минерал.
[...] ess-kju-ellite [...]
...] sequelite [...]
WAL обеспечивает большую параллельность, поскольку читатели не блокируют писателей, а писатель не блокирует читателей. Чтение и запись могут выполняться одновременно.
записи с определенным rowid или всех записей с rowid в указанном диапазоне выполняется примерно в два раза быстрее, чем аналогичный поиск, выполненный с указанием любого другого PRIMARY KEY или индексированного значения.
Иногда вам приходится использовать базу данных, которая не поддерживает ограничения внешнего ключа (например, механизм хранения MyISAM MySQL или SQLite до версии 3.6.19).