Страница 1 из 1

Общие сведения о SQLite

Добавлено: 13 мар 2010, 11:10
Raven
SQLite — встраиваемый движок баз данных. В 2005 году проект получил награду Google-O’Reilly Open Source Awards.

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

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

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

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

Ограничения

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

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

Описание Значение Константа в исходнике
Максимальная длина строки или BLOB-поля. 1 000 000 000 SQLITE_MAX_LENGTH
Максимальное количество колонок. 2 000 SQLITE_MAX_COLUMN
Максимальная длина SQL-выражения. 1 000 000 SQLITE_MAX_SQL_LENGTH
Максимальное количество таблиц в выражениях с JOIN. 64
Максимальная глубина дерева выражений. 1 000 SQLITE_MAX_EXPR_DEPTH
Максимальное количество аргументов функции. 100 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
Максимальный размер страницы базы данных. 32 768 SQLITE_MAX_PAGE_SIZE
Максимальное количество страниц в файле базы данных. 1 073 741 823 SQLITE_MAX_PAGE_COUNT


На текущий момент только значение SQLITE_MAX_PAGE_SIZE не может быть больше заданного по-умолчанию. Таким образом, не изменяя SQLITE_MAX_PAGE_COUNT, можно сказать, что максимальный размер файла базы данных составляет примерно 32 ТБ (31.999999970197678).

Некоторые ограничения можно менять в сторону уменьшения во время исполнения программы при помощи задания категории и соответствующего значения функции 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


Сама библиотека SQLite написана на C; существует большое количество привязок к другим языкам программирования, в том числе C++, Java, C#, Python, Perl, PHP, Tcl (средства для работы с Tcl включены в комплект поставки SQLite), Ruby, Haskell, Scheme, Smalltalk, Lua и Parser, а также ко многим другим. Полный список существующих средств можно найти на странице проекта [4].

Также SQLite поддерживают:
* Среда для запуска приложений Adobe Integrated Runtime, правда частично;
* Gears;
* Фреймворк Qt;
* Платформа XUL на движке Gecko 1.9, XULRunner 1.9 и, потенциально, все приложения, основанные на этой платформе, в том числе Mozilla Firefox (начиная с версии 3.0) и Mozilla Thunderbird (начиная с версии 3.0). В качестве примеров XUL-приложений можно привести Songbird и SQLite Manager [5].

Многие программы поддерживают SQLite в качестве формата хранения данных (особенно в Mac OS и iPhone OS), в том числе:
* Amarok
* 1С:Предприятие 7.7 (с помощью внешней компоненты );
* Banshee;
* F-Spot;
* Gajim;
* Miranda IM (с помощью плагина драйвера базы данных)