SQLite

Поделись знанием:
Перейти к: навигация, поиск
SQLite
Тип

реляционная СУБД

К:Википедия:Статьи без изображений (тип: не указан)

SQLite (/ˌɛskjuːɛlˈlaɪt/ или /ˈsiːkwəl.laɪt/) — компактная встраиваемая реляционная база данных. Исходный код библиотеки передан в общественное достояние. В 2005 году проект получил награду Google-O’Reilly Open Source Awards[1].





Дизайн

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

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

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

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

Типы данных

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

Ограничения

Старые версии 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 ТБ (35’184’372’056’064 Б).

Некоторые ограничения можно менять в сторону уменьшения во время исполнения программы при помощи задания категории и соответствующего значения функции 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; существует большое количество привязок к другим языкам программирования, в том числе Delphi, C++, Java, C#, VB.NET, Python, Perl, Node.js, PHP, PureBasic[2], Tcl (средства для работы с Tcl включены в комплект поставки SQLite), Ruby, Haskell, Scheme, Smalltalk, Lua и Parser, а также ко многим другим. Полный список существующих средств размещён на странице проекта[3].

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

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

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

См. также

Напишите отзыв о статье "SQLite"

Ссылки

  • [www.sqlite.org/ Официальный сайт]  (англ.)
  • [www.sqlite.org/cvstrac/wiki?p=ManagementTools Список программ для администрирования SQLite]  (англ.)
  • [sites.google.com/site/javatokens/sqlite Самоучитель SQLite]

Примечания

  1. [code.google.com/opensource/osa-hall-of-fame.html Google-O’Reilly Open Source Awards — Hall of Fame — Google Code]
  2. [purebasic.com/documentation/database/usesqlitedatabase.html Функция UseSQLiteDatabase()]
  3. [www.sqlite.org/cvstrac/wiki?p=SqliteWrappers Список привязок SQLite для других языков]
  4. [www.yiiframework.ru/doc/guide/ru/quickstart.first-app Создание первого приложения - Полное руководство по Yii - YiiFramework.ru]. www.yiiframework.ru. Проверено 7 марта 2016.
  5. [code.google.com/p/sqlite-manager/ sqlite-manager — Project Hosting on Google Code]
  6. [www.mail-archive.com/sqlite-users%40sqlite.org/msg27326.html Skype client using SQLite?]
  7. [code.google.com/p/sqlite1c/ sqlite1c — Project Hosting on Google Code]
  8. [v8.1c.ru/o7/201310log/index.htm Как мы улучшили журнал регистрации]. 1С (29.10.2013).
  9. [addons.miranda-im.org/details.php?action=viewfile&id=3535 dbRW Database Driver 1.2]

Отрывок, характеризующий SQLite

Назвали полковника, князя Репнина.
– Вы командир кавалергардского полка императора Александра? – спросил Наполеон.
– Я командовал эскадроном, – отвечал Репнин.
– Ваш полк честно исполнил долг свой, – сказал Наполеон.
– Похвала великого полководца есть лучшая награда cолдату, – сказал Репнин.
– С удовольствием отдаю ее вам, – сказал Наполеон. – Кто этот молодой человек подле вас?
Князь Репнин назвал поручика Сухтелена.
Посмотрев на него, Наполеон сказал, улыбаясь:
– II est venu bien jeune se frotter a nous. [Молод же явился он состязаться с нами.]
– Молодость не мешает быть храбрым, – проговорил обрывающимся голосом Сухтелен.
– Прекрасный ответ, – сказал Наполеон. – Молодой человек, вы далеко пойдете!
Князь Андрей, для полноты трофея пленников выставленный также вперед, на глаза императору, не мог не привлечь его внимания. Наполеон, видимо, вспомнил, что он видел его на поле и, обращаясь к нему, употребил то самое наименование молодого человека – jeune homme, под которым Болконский в первый раз отразился в его памяти.
– Et vous, jeune homme? Ну, а вы, молодой человек? – обратился он к нему, – как вы себя чувствуете, mon brave?
Несмотря на то, что за пять минут перед этим князь Андрей мог сказать несколько слов солдатам, переносившим его, он теперь, прямо устремив свои глаза на Наполеона, молчал… Ему так ничтожны казались в эту минуту все интересы, занимавшие Наполеона, так мелочен казался ему сам герой его, с этим мелким тщеславием и радостью победы, в сравнении с тем высоким, справедливым и добрым небом, которое он видел и понял, – что он не мог отвечать ему.
Да и всё казалось так бесполезно и ничтожно в сравнении с тем строгим и величественным строем мысли, который вызывали в нем ослабление сил от истекшей крови, страдание и близкое ожидание смерти. Глядя в глаза Наполеону, князь Андрей думал о ничтожности величия, о ничтожности жизни, которой никто не мог понять значения, и о еще большем ничтожестве смерти, смысл которой никто не мог понять и объяснить из живущих.
Император, не дождавшись ответа, отвернулся и, отъезжая, обратился к одному из начальников:
– Пусть позаботятся об этих господах и свезут их в мой бивуак; пускай мой доктор Ларрей осмотрит их раны. До свидания, князь Репнин, – и он, тронув лошадь, галопом поехал дальше.
На лице его было сиянье самодовольства и счастия.
Солдаты, принесшие князя Андрея и снявшие с него попавшийся им золотой образок, навешенный на брата княжною Марьею, увидав ласковость, с которою обращался император с пленными, поспешили возвратить образок.
Князь Андрей не видал, кто и как надел его опять, но на груди его сверх мундира вдруг очутился образок на мелкой золотой цепочке.
«Хорошо бы это было, – подумал князь Андрей, взглянув на этот образок, который с таким чувством и благоговением навесила на него сестра, – хорошо бы это было, ежели бы всё было так ясно и просто, как оно кажется княжне Марье. Как хорошо бы было знать, где искать помощи в этой жизни и чего ждать после нее, там, за гробом! Как бы счастлив и спокоен я был, ежели бы мог сказать теперь: Господи, помилуй меня!… Но кому я скажу это! Или сила – неопределенная, непостижимая, к которой я не только не могу обращаться, но которой не могу выразить словами, – великое всё или ничего, – говорил он сам себе, – или это тот Бог, который вот здесь зашит, в этой ладонке, княжной Марьей? Ничего, ничего нет верного, кроме ничтожества всего того, что мне понятно, и величия чего то непонятного, но важнейшего!»
Носилки тронулись. При каждом толчке он опять чувствовал невыносимую боль; лихорадочное состояние усилилось, и он начинал бредить. Те мечтания об отце, жене, сестре и будущем сыне и нежность, которую он испытывал в ночь накануне сражения, фигура маленького, ничтожного Наполеона и над всем этим высокое небо, составляли главное основание его горячечных представлений.
Тихая жизнь и спокойное семейное счастие в Лысых Горах представлялись ему. Он уже наслаждался этим счастием, когда вдруг являлся маленький Напoлеон с своим безучастным, ограниченным и счастливым от несчастия других взглядом, и начинались сомнения, муки, и только небо обещало успокоение. К утру все мечтания смешались и слились в хаос и мрак беспамятства и забвения, которые гораздо вероятнее, по мнению самого Ларрея, доктора Наполеона, должны были разрешиться смертью, чем выздоровлением.
– C'est un sujet nerveux et bilieux, – сказал Ларрей, – il n'en rechappera pas. [Это человек нервный и желчный, он не выздоровеет.]
Князь Андрей, в числе других безнадежных раненых, был сдан на попечение жителей.


В начале 1806 года Николай Ростов вернулся в отпуск. Денисов ехал тоже домой в Воронеж, и Ростов уговорил его ехать с собой до Москвы и остановиться у них в доме. На предпоследней станции, встретив товарища, Денисов выпил с ним три бутылки вина и подъезжая к Москве, несмотря на ухабы дороги, не просыпался, лежа на дне перекладных саней, подле Ростова, который, по мере приближения к Москве, приходил все более и более в нетерпение.
«Скоро ли? Скоро ли? О, эти несносные улицы, лавки, калачи, фонари, извозчики!» думал Ростов, когда уже они записали свои отпуски на заставе и въехали в Москву.
– Денисов, приехали! Спит! – говорил он, всем телом подаваясь вперед, как будто он этим положением надеялся ускорить движение саней. Денисов не откликался.
– Вот он угол перекресток, где Захар извозчик стоит; вот он и Захар, и всё та же лошадь. Вот и лавочка, где пряники покупали. Скоро ли? Ну!
– К какому дому то? – спросил ямщик.
– Да вон на конце, к большому, как ты не видишь! Это наш дом, – говорил Ростов, – ведь это наш дом! Денисов! Денисов! Сейчас приедем.
Денисов поднял голову, откашлялся и ничего не ответил.
– Дмитрий, – обратился Ростов к лакею на облучке. – Ведь это у нас огонь?
– Так точно с и у папеньки в кабинете светится.
– Еще не ложились? А? как ты думаешь? Смотри же не забудь, тотчас достань мне новую венгерку, – прибавил Ростов, ощупывая новые усы. – Ну же пошел, – кричал он ямщику. – Да проснись же, Вася, – обращался он к Денисову, который опять опустил голову. – Да ну же, пошел, три целковых на водку, пошел! – закричал Ростов, когда уже сани были за три дома от подъезда. Ему казалось, что лошади не двигаются. Наконец сани взяли вправо к подъезду; над головой своей Ростов увидал знакомый карниз с отбитой штукатуркой, крыльцо, тротуарный столб. Он на ходу выскочил из саней и побежал в сени. Дом также стоял неподвижно, нерадушно, как будто ему дела не было до того, кто приехал в него. В сенях никого не было. «Боже мой! все ли благополучно?» подумал Ростов, с замиранием сердца останавливаясь на минуту и тотчас пускаясь бежать дальше по сеням и знакомым, покривившимся ступеням. Всё та же дверная ручка замка, за нечистоту которой сердилась графиня, также слабо отворялась. В передней горела одна сальная свеча.
Старик Михайла спал на ларе. Прокофий, выездной лакей, тот, который был так силен, что за задок поднимал карету, сидел и вязал из покромок лапти. Он взглянул на отворившуюся дверь, и равнодушное, сонное выражение его вдруг преобразилось в восторженно испуганное.
– Батюшки, светы! Граф молодой! – вскрикнул он, узнав молодого барина. – Что ж это? Голубчик мой! – И Прокофий, трясясь от волненья, бросился к двери в гостиную, вероятно для того, чтобы объявить, но видно опять раздумал, вернулся назад и припал к плечу молодого барина.
– Здоровы? – спросил Ростов, выдергивая у него свою руку.
– Слава Богу! Всё слава Богу! сейчас только покушали! Дай на себя посмотреть, ваше сиятельство!
– Всё совсем благополучно?
– Слава Богу, слава Богу!
Ростов, забыв совершенно о Денисове, не желая никому дать предупредить себя, скинул шубу и на цыпочках побежал в темную, большую залу. Всё то же, те же ломберные столы, та же люстра в чехле; но кто то уж видел молодого барина, и не успел он добежать до гостиной, как что то стремительно, как буря, вылетело из боковой двери и обняло и стало целовать его. Еще другое, третье такое же существо выскочило из другой, третьей двери; еще объятия, еще поцелуи, еще крики, слезы радости. Он не мог разобрать, где и кто папа, кто Наташа, кто Петя. Все кричали, говорили и целовали его в одно и то же время. Только матери не было в числе их – это он помнил.