SQLite
| SQLite | |||
|---|---|---|---|
| Тип | встраиваемая СУБД | ||
| Разработчик | Ричард Хипп[вд] | ||
| Написана на | Си[2] | ||
| Операционная система | кроссплатформенность | ||
| Дата выпуска | август2000 | ||
| Последняя версия | |||
| Репозиторий | sqlite.org/src | ||
| |||
| |||
| Лицензия | Общественное достояние | ||
| Сайт | sqlite.org (англ.) | ||
SQLite (/ˌɛsˌkjuːˌɛlˈaɪt/,[3][4]/ˈsiːkwəˌlaɪt/[5]) — компактнаявстраиваемая СУБД.Исходный код библиотеки передан вобщественное достояние. В2005 году проект получил наградуGoogle-O’Reilly Open Source Awards[6].
Устройство
[править |править код]Слово «встраиваемый» (англ. embedded) означает, что SQLite не использует парадигмыклиент-сервер, то естьдвижок SQLite не является отдельно работающим процессом, с которым взаимодействует программа, а представляет собойбиблиотеку, с которой программа компонуется, и движок становится составной частью программы. Таким образом, в качестве протокола обмена используются вызовы функций (API) библиотеки SQLite. Такой подход уменьшает накладные расходы, время отклика и упрощает программу. SQLite хранит всю базу данных (включая определения, таблицы, индексы и данные) в единственном стандартном файле на том компьютере, на котором исполняется программа. Простота реализации достигается за счёт того, что перед началом исполнения транзакции записи весь файл, хранящий базу данных, блокируется;ACID-функции достигаются в том числе за счёт создания файла журнала.
Несколько процессов или потоков могут одновременно без каких-либо проблем читать данные из одной базы. Запись в базу можно осуществить только в том случае, если никаких других запросов в данный момент не обслуживается; в противном случае попытка записи оканчивается неудачей, и в программу возвращается код ошибки. Другим вариантом развития событий является автоматическое повторение попыток записи в течение заданного интервала времени.

В комплекте поставки идёт также функциональная клиентская часть в виде исполняемого файлаsqlite3, с помощью которого демонстрируется реализация функций основной библиотеки. Клиентская часть являетсякроссплатформенной утилитойкомандной строки.
SQLite возможно использовать как навстраиваемых системах, так и на выделенных машинах с гигабайтными массивами данных.
Типы данных
[править |править код]SQLite поддерживаетдинамическое типизирование данных. Возможные типы значений:INTEGER,REAL,TEXT иBLOB. Также поддерживается специальное значениеNULL.[7]
Размеры значений типа TEXT и BLOB не ограничены ничем, кроме константыSQLITE_MAX_LENGTH в исходном коде SQLite, равной 1ГБ[8].
Каждое значение в любом поле любой записи может быть любого из этих типов, независимо от типа, указанного при объявлении полей таблицы. Указанный при объявлении поля тип хранится для справки в его исходном написании, и используется в качестве основы для выбора предпочтений (так называемое type affinity — это подход, редко встречающийся в других СУБД) при выполнении неявных преобразований типов на основании похожести этого названия типа на что-либо, знакомое SQLite. В этот алгоритм зашит обширный перечень практикуемых в других СУБД вариантов названий типов данных. Если безопасного преобразования записываемого значения в предпочитаемый тип не получается, SQLite записывает значение в его исходном виде. Для получения значений из базы есть ряд функций для каждого из типов, и если тип хранимого значения не соответствует запрашиваемому, оно тоже, по возможности, преобразуется.[9]
Ограничения
[править |править код]Старые версии 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ТиБ.[10]
Некоторые ограничения можно менять в сторону уменьшения во время исполнения программы при помощи задания категории и соответствующего значения функцииsqlite3_limit():
intsqlite3_limit(sqlite3*,intid,intnewVal)
| Категория | Описание |
|---|---|
| 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[11],Tcl (средства для работы с Tcl включены в комплект поставки SQLite),Ruby,Haskell,Scheme,Smalltalk,Lua иParser, а также ко многим другим. Полный список существующих средств размещён на странице проекта[12].
Простота и удобство встраивания SQLite привели к тому, что библиотека используется вбраузерах, музыкальных плеерах и многих других программах.
В частности, SQLite используется в:
- Adobe Integrated Runtime — среда для запуска приложений (частично);
- Gears;
- Autoit;
- ФреймворкQt;
- ПлатформаXUL на движкеGecko 1.9+,XULRunner 1.9+ и, потенциально, все приложения, основанные на этой платформе, в том числе:
- Mozilla Firefox (начиная с версии 3.0)
- Mozilla Thunderbird (начиная с версии 3.0)
- Songbird
- SQLite Manager[13].
- Skype[14];
- Viber;
- Некоторые моделиGPS-навигаторовGarmin
Многие программы поддерживают SQLite в качестве формата хранения данных (особенно вMac OS иiOS,Android), в том числе:
- 1С:Предприятие 7.7 (с помощью внешнего компонента[15]);
- 1С:Предприятие 8.3 (для хранения записей журнала регистрации[16]);
- Adobe Photoshop Lightroom;
- FlylinkDC++;
- AIMP;
- Banshee;
- Calibre;
- Eserv;
- F-Spot;
- Nextcloud;
- FAR Manager (начиная с версии 3.0);
- Gajim;
- Google Chrome;
- Miranda IM (с помощьюплагина драйвера базы данных[17]);
- MyChat;
- Opera (начиная с версии 10.50);
- qutIM;
- QGIS;
- Safari;
- XnView;
- Garena.
См. также
[править |править код]Примечания
[править |править код]- ↑SQLite Release 3.51.2 On 2026-01-09 — 2026.
- ↑The sqlite Open Source Project on Open Hub: Languages Page — 2006.
- ↑Why SQLite succeeded as a database — Richard Hipp, creator of SQLite.The Changelog. Episode 201. Отметка времени: 00:17:25.Архивировано 7 июля 2022. Дата обращения: 7 июля 2022.
How do I pronounce the name of the product? I say S-Q-L-ite, like a mineral.
. - ↑D. Richard Hipp (presenter) (31 мая 2006).An Introduction to SQLite(video). Google Inc. Отметка времени: 00:01:14. Дата обращения: 23 марта 2010.
[...] ess-kju-ellite [...]
. - ↑D. Richard Hipp (presenter) (31 мая 2006).An Introduction to SQLite. Google Inc. Отметка времени: 00:48:15. Дата обращения: 23 марта 2010.
[...] sequelite [...]
. - ↑Google-O’Reilly Open Source Awards — Hall of Fame — Google Code . Дата обращения: 5 марта 2010. Архивировано 11 июля 2011 года.
- ↑Архивированная копия (англ.). Дата обращения: 11 марта 2019. Архивировано изоригинала 13 февраля 2019 года.
- ↑(англ.) Implementation Limits For SQLite . Дата обращения: 23 ноября 2018. (англ.) Архивировано 8 января 2019 года.
- ↑Архивированная копия (англ.). Дата обращения: 11 марта 2019. Архивировано изоригинала 10 марта 2019 года.
- ↑Implementation Limits For SQLite . Дата обращения: 8 декабря 2021. Архивировано 7 ноября 2021 года.
- ↑Функция UseSQLiteDatabase() . Дата обращения: 28 сентября 2013. Архивировано 2 октября 2013 года.
- ↑Список привязок SQLite для других языков . Дата обращения: 4 апреля 2007. Архивировано изоригинала 5 февраля 2009 года.
- ↑sqlite-manager — Project Hosting on Google Code . Дата обращения: 5 марта 2010. Архивировано 9 февраля 2010 года.
- ↑Skype client using SQLite? Дата обращения: 7 мая 2010. Архивировано изоригинала 28 сентября 2014 года.
- ↑sqlite1c — Project Hosting on Google Code . Дата обращения: 5 августа 2008. Архивировано 12 апреля 2009 года.
- ↑Как мы улучшили журнал регистрации . 1С (29 октября 2013). Дата обращения: 1 июля 2014. Архивировано 27 августа 2014 года.
- ↑dbRW Database Driver 1.2Архивировано 1 мая 2011 года.