Interested Article - SQLite

SQLite ( / ˌ ɛ s ˌ k juː ˌ ɛ l ˈ t / , / ˈ s k w ə ˌ l t / ) — компактная встраиваемая СУБД . Исходный код библиотеки передан в общественное достояние . В 2005 году проект получил награду Google-O’Reilly Open Source Awards .

Устройство

Слово «встраиваемый» ( англ. embedded) означает, что SQLite не использует парадигмы клиент-сервер , то есть движок SQLite не является отдельно работающим процессом, с которым взаимодействует программа, а представляет собой библиотеку , с которой программа компонуется, и движок становится составной частью программы. Таким образом, в качестве протокола обмена используются вызовы функций ( API ) библиотеки SQLite. Такой подход уменьшает накладные расходы, время отклика и упрощает программу. SQLite хранит всю базу данных (включая определения, таблицы, индексы и данные) в единственном стандартном файле на том компьютере, на котором исполняется программа. Простота реализации достигается за счёт того, что перед началом исполнения транзакции записи весь файл, хранящий базу данных, блокируется; ACID -функции достигаются в том числе за счёт создания файла журнала.

Несколько процессов или потоков могут одновременно без каких-либо проблем читать данные из одной базы. Запись в базу можно осуществить только в том случае, если никаких других запросов в данный момент не обслуживается; в противном случае попытка записи оканчивается неудачей, и в программу возвращается код ошибки. Другим вариантом развития событий является автоматическое повторение попыток записи в течение заданного интервала времени.

Архитектура SQLite

В комплекте поставки идёт также функциональная клиентская часть в виде исполняемого файла sqlite3 , с помощью которого демонстрируется реализация функций основной библиотеки. Клиентская часть является кроссплатформенной утилитой командной строки .

SQLite возможно использовать как на встраиваемых системах , так и на выделенных машинах с гигабайтными массивами данных.

Типы данных

SQLite поддерживает динамическое типизирование данных. Возможные типы значений: INTEGER , REAL , TEXT и BLOB . Также поддерживается специальное значение NULL .

Размеры значений типа TEXT и BLOB не ограничены ничем, кроме константы SQLITE_MAX_LENGTH в исходном коде SQLite, равной 1 ГБ .

Каждое значение в любом поле любой записи может быть любого из этих типов, независимо от типа, указанного при объявлении полей таблицы. Указанный при объявлении поля тип хранится для справки в его исходном написании, и используется в качестве основы для выбора предпочтений (так называемое type affinity — это подход, редко встречающийся в других СУБД) при выполнении неявных преобразований типов на основании похожести этого названия типа на что-либо, знакомое SQLite. В этот алгоритм зашит обширный перечень практикуемых в других СУБД вариантов названий типов данных. Если безопасного преобразования записываемого значения в предпочитаемый тип не получается, SQLite записывает значение в его исходном виде. Для получения значений из базы есть ряд функций для каждого из типов, и если тип хранимого значения не соответствует запрашиваемому, оно тоже, по возможности, преобразуется.

Ограничения

Старые версии SQLite были спроектированы без каких-либо ограничений, единственным условием было то, чтобы база данных умещалась в памяти, в которой все вычисления производились при помощи 32-разрядных целых чисел. Это создавало определённые проблемы. Из-за того, что верхние пределы не были определены и соответственно должным образом протестированы, часто обнаруживались ошибки при использовании SQLite в достаточно экстремальных условиях. Поэтому в новых версиях SQLite были введены пределы, которые теперь проверяются вместе с общим набором тестов.

Во время компиляции библиотеки SQLite устанавливаются следующие ограничения, которые можно, при острой необходимости, увеличивать:

Описание Значение Константа в исходном коде
Максимальная длина строки или BLOB -поля, байт 1 000 000 000 SQLITE_MAX_LENGTH
Максимальное количество колонок 2 000 SQLITE_MAX_COLUMN
Максимальная длина SQL -выражения 1 000 000 000 SQLITE_MAX_SQL_LENGTH
Максимальное количество таблиц в выражениях с JOIN 64
Максимальная глубина дерева выражений 1 000 SQLITE_MAX_EXPR_DEPTH
Максимальное количество аргументов функции 127 SQLITE_MAX_FUNCTION_ARG
Максимальное количество термов в объединённом выражении с SELECT 500 SQLITE_MAX_COMPOUND_SELECT
Максимальная длина шаблона как аргумента операторов LIKE или GLOB 50 000 SQLITE_MAX_LIKE_PATTERN_LENGTH
Максимальное количество символов-заменителей в одном SQL-выражении 999 SQLITE_MAX_VARIABLE_NUMBER
Максимальная глубина рекурсии триггеров 1 000 SQLITE_MAX_TRIGGER_DEPTH
Максимальное количество присоединённых баз 10 SQLITE_MAX_ATTACHED
Максимальный размер страницы базы данных 65 536 SQLITE_MAX_PAGE_SIZE
Максимальное количество страниц в файле базы данных 1 073 741 823 SQLITE_MAX_PAGE_COUNT

Для версии 3.37.0 значение SQLITE_MAX_PAGE_SIZE не может быть больше заданного по умолчанию, что прямо указано в исходном коде. Максимальное количество страниц в БД 4294967294. Таким образом, максимальный размер БД составляет 256 ТиБ .

Некоторые ограничения можно менять в сторону уменьшения во время исполнения программы при помощи задания категории и соответствующего значения функции sqlite3_limit() :

int sqlite3_limit(sqlite3*, int id, int newVal) 
Категория Описание
SQLITE_LIMIT_LENGTH Максимальная длина любой строки или BLOB-поля или ряда
SQLITE_LIMIT_SQL_LENGTH Максимальная длина SQL-выражения
SQLITE_LIMIT_COLUMN Максимальное количество колонок в определении таблицы или результате выборки, или индексе, или выражениях с операторами ORDER BY или GROUP BY
SQLITE_LIMIT_EXPR_DEPTH Максимальная глубина разобранного дерева любого выражения
SQLITE_LIMIT_COMPOUND_SELECT Максимальное количество термов в объединённом выражении с SELECT
SQLITE_LIMIT_VDBE_OP Максимальное количество инструкций программы виртуальной машины выполняемого SQL-выражения
SQLITE_LIMIT_FUNCTION_ARG Максимально количество аргументов функции
SQLITE_LIMIT_ATTACHED Максимальное количество присоединённых баз
SQLITE_LIMIT_LIKE_PATTERN_LENGTH Максимальная длина шаблона как аргумента операторов LIKE или GLOB
SQLITE_LIMIT_VARIABLE_NUMBER Максимальное количество переменных в SQL-выражении, которые можно связать
SQLITE_LIMIT_TRIGGER_DEPTH Максимальная глубина рекурсии триггеров

Это может быть полезным, если SQLite используется в веб-приложениях , так как уменьшенные пределы могут предотвратить DoS-атаки со стороны недоверяемых внешних клиентов.

Использование

Сама библиотека SQLite написана на C ; существует большое количество привязок к другим языкам программирования, в том числе Apple Swift, Delphi , C++ , Java , Kotlin , C# , VB.NET , Python , Perl , Node.js , PHP , PureBasic , Tcl (средства для работы с Tcl включены в комплект поставки SQLite), Ruby , Haskell , Scheme , Smalltalk , Lua и Parser , а также ко многим другим. Полный список существующих средств размещён на странице проекта .

Простота и удобство встраивания SQLite привели к тому, что библиотека используется в браузерах , музыкальных плеерах и многих других программах.

В частности, SQLite используется в:

Многие программы поддерживают SQLite в качестве формата хранения данных (особенно в Mac OS и iOS , Android ), в том числе:

См. также

Примечания

  1. — 2023.
  2. — 2006.
  3. « ». The Changelog . Серия 201. Event occurs at 00:17:25.«How do I pronounce the name of the product? I say S-Q-L-ite, like a mineral.»
  4. (presenter). (video). Google Inc.. Время от начала источника: 00:01:14. «[...] ess-kju-ellite [...]»
  5. (presenter). . Google Inc.. Время от начала источника: 00:48:15. «[...] sequelite [...]»
  6. (неопр.) . Дата обращения: 5 марта 2010. 11 июля 2011 года.
  7. (неопр.) . Дата обращения: 11 марта 2019. Архивировано из 13 февраля 2019 года. (англ.)
  8. (неопр.) . Дата обращения: 23 ноября 2018. 8 января 2019 года.
  9. (неопр.) . Дата обращения: 11 марта 2019. Архивировано из 10 марта 2019 года. (англ.)
  10. (неопр.) . Дата обращения: 8 декабря 2021. 7 ноября 2021 года.
  11. (неопр.) . Дата обращения: 28 сентября 2013. 2 октября 2013 года.
  12. (неопр.) . Дата обращения: 4 апреля 2007. Архивировано из 5 февраля 2009 года.
  13. (неопр.) . Дата обращения: 5 марта 2010. 9 февраля 2010 года.
  14. (неопр.) Дата обращения: 7 мая 2010. Архивировано из 28 сентября 2014 года.
  15. (неопр.) . Дата обращения: 5 августа 2008. 12 апреля 2009 года.
  16. (неопр.) . 1С (29 октября 2013). Дата обращения: 1 июля 2014. 27 августа 2014 года.
  17. 1 мая 2011 года.

Ссылки

  • (англ.)
  • (англ.)


Same as SQLite