SQLite: различия между версиями
[непроверенная версия] | [непроверенная версия] |
Спасено источников — 1, отмечено мёртвыми — 0. Сообщить об ошибке. См. FAQ.) #IABot (v2.0 |
м обновление |
||
Строка 1: | Строка 1: | ||
{{Карточка программы |
{{Карточка программы |
||
| последняя версия = 3.32 |
|||
| дата последней версии = 22 мая 2020 |
|||
}} |
|||
'''SQLite''' (/ˌɛskjuːɛlˈlaɪt/ или /ˈsiːkwəl.laɪt/) — компактная [[встраиваемая СУБД]]. [[Исходный код]] библиотеки передан в [[общественное достояние]]. В [[2005 год]]у проект получил награду Google-O’Reilly Open Source Awards<ref>[http://code.google.com/opensource/osa-hall-of-fame.html Google-O’Reilly Open Source Awards — Hall of Fame — Google Code<!-- Заголовок добавлен ботом -->]</ref>. |
'''SQLite''' (/ˌɛskjuːɛlˈlaɪt/ или /ˈsiːkwəl.laɪt/) — компактная [[встраиваемая СУБД]]. [[Исходный код]] библиотеки передан в [[общественное достояние]]. В [[2005 год]]у проект получил награду Google-O’Reilly Open Source Awards<ref>[http://code.google.com/opensource/osa-hall-of-fame.html Google-O’Reilly Open Source Awards — Hall of Fame — Google Code<!-- Заголовок добавлен ботом -->]</ref>. |
Версия от 09:25, 29 мая 2020
SQLite | |||
---|---|---|---|
Тип | serverless relational database management system[вд] | ||
Разработчик | Ричард Хипп[вд] | ||
Написана на | Си[1] | ||
Операционная система | кроссплатформенность | ||
Первый выпуск | август 2000 | ||
Последняя версия | 3.32 (22 мая 2020) | ||
Репозиторий |
sqlite.org./docsrc sqlite.org./src |
||
| |||
| |||
Лицензия | 🅮[вд][2] | ||
Сайт | sqlite.org (англ.) | ||
Медиафайлы на Викискладе |
SQLite (/ˌɛskjuːɛlˈlaɪt/ или /ˈsiːkwəl.laɪt/) — компактная встраиваемая СУБД. Исходный код библиотеки передан в общественное достояние. В 2005 году проект получил награду Google-O’Reilly Open Source Awards[3].
Устройство
Слово «встраиваемый» (embedded) означает, что SQLite не использует парадигму клиент-сервер, то есть движок SQLite не является отдельно работающим процессом, с которым взаимодействует программа, а представляет собой библиотеку, с которой программа компонуется, и движок становится составной частью программы. Таким образом, в качестве протокола обмена используются вызовы функций (API) библиотеки SQLite. Такой подход уменьшает накладные расходы, время отклика и упрощает программу. SQLite хранит всю базу данных (включая определения, таблицы, индексы и данные) в единственном стандартном файле на том компьютере, на котором исполняется программа. Простота реализации достигается за счёт того, что перед началом исполнения транзакции записи весь файл, хранящий базу данных, блокируется; ACID-функции достигаются в том числе за счёт создания файла журнала.
Несколько процессов или потоков могут одновременно без каких-либо проблем читать данные из одной базы. Запись в базу можно осуществить только в том случае, если никаких других запросов в данный момент не обслуживается; в противном случае попытка записи оканчивается неудачей, и в программу возвращается код ошибки. Другим вариантом развития событий является автоматическое повторение попыток записи в течение заданного интервала времени.
В комплекте поставки идёт также функциональная клиентская часть в виде исполняемого файла sqlite3, с помощью которого демонстрируется реализация функций основной библиотеки. Клиентская часть является кроссплатформенной утилитой командной строки.
SQLite возможно использовать как на встраиваемых системах, так и на выделенных машинах с гигабайтными массивами данных.
Типы данных
SQLite поддерживает динамическое типизирование данных. Возможные типы значений: INTEGER, REAL, TEXT и BLOB. Так же поддерживается специальное значение NULL.[4]
Размеры значений типа TEXT и BLOB не ограничены ничем, кроме константы SQLITE_MAX_LENGTH в исходниках sqlite, равной миллиарду (109)[5].
Каждое значение в любом поле любой записи может быть любого из этих типов, независимо от типа, указанного при объявлении полей таблицы. Указанный при объявлении поля тип хранится для справки в его исходном написании, и используется в качестве основы для выбора предпочтений (так называемое «type affinity»: это подход, редко встречающийся в других СУБД) при выполнении неявных преобразований типов на основании похожести этого названия типа на что-либо, знакомое SQLite. В этот алгоритм зашит обширный перечень практикуемых в других СУБД вариантов названий типов данных. Если безопасного преобразования записываемого значения в предпочитаемый тип не получается, SQLite записывает значение в его исходном виде. Для получения значений из базы есть ряд функций для каждого из типов, и если тип хранимого значения не соответствует запрашиваемому, оно тоже, по возможности, преобразуется.[6]
Ограничения
Старые версии 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 |
На текущий момент[когда?] только значение SQLITE_MAX_PAGE_SIZE не может быть больше заданного по умолчанию. Таким образом, не изменяя SQLITE_MAX_PAGE_COUNT, можно сказать, что максимальный размер файла базы данных составляет примерно 140 ТБ (247 Б).
Некоторые ограничения можно менять в сторону уменьшения во время исполнения программы при помощи задания категории и соответствующего значения функции 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, C#, VB.NET, Python, Perl, Node.js, PHP, PureBasic[7], Tcl (средства для работы с Tcl включены в комплект поставки SQLite), Ruby, Haskell, Scheme, Smalltalk, Lua и Parser, а также ко многим другим. Полный список существующих средств размещён на странице проекта[8].
Простота и удобство встраивания 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[9].
- Skype[10];
- Viber;
- Некоторые модели GPS-навигаторов Garmin
Многие программы поддерживают SQLite в качестве формата хранения данных (особенно в Mac OS и iOS, Android), в том числе:
- 1С:Предприятие 7.7 (с помощью внешнего компонента[11]);
- 1С:Предприятие 8.3 (для хранения записей журнала регистрации[12]);
- Adobe Photoshop Lightroom;
- FlylinkDC++;
- AIMP;
- Banshee;
- Calibre;
- Eserv;
- F-Spot;
- Nextcloud;
- FAR Manager (начиная с версии 3.0);
- Gajim;
- Google Chrome;
- Miranda IM (с помощью плагина драйвера базы данных[13]);
- MyChat;
- Opera (начиная с версии 10.50);
- qutIM;
- QGIS;
- Safari;
- XnView;
- Garena.
См. также
Примечания
- ↑ The sqlite Open Source Project on Open Hub: Languages Page — 2006.
- ↑ https://www.sqlite.org/copyright.html
- ↑ Google-O’Reilly Open Source Awards — Hall of Fame — Google Code
- ↑ https://sqlite.org/datatype3.html (англ.) (недоступная ссылка)
- ↑ https://sqlite.org/limits.html#max_length (англ.)
- ↑ https://sqlite.org/c3ref/column_blob.html (англ.) (недоступная ссылка)
- ↑ Функция UseSQLiteDatabase()
- ↑ Список привязок SQLite для других языков . Дата обращения: 4 апреля 2007. Архивировано из оригинала 5 февраля 2009 года.
- ↑ sqlite-manager — Project Hosting on Google Code
- ↑ Skype client using SQLite? Дата обращения: 7 мая 2010. Архивировано из оригинала 28 сентября 2014 года.
- ↑ sqlite1c — Project Hosting on Google Code
- ↑ Как мы улучшили журнал регистрации . 1С (29 октября 2013).
- ↑ dbRW Database Driver 1.2 Архивировано 1 мая 2011 года.
Ссылки