SQLite ( / ˌ ɛ с ˌ к Ju ˌ ɛ л aɪ т / , [4] [5] / с я к ш ə ˌ л aɪ т / [6] ) является системой управления реляционной базы данных (СУБД) , содержащаяся в C библиотека . В отличие от многих других систем управления базами данных, SQLite не является механизмом базы данных клиент-сервер . Скорее, он встроен в конечную программу.
Разработчики) | Д. Ричард Хипп |
---|---|
Первый выпуск | 17 августа 2000 г . |
Стабильный выпуск | 3.36.0 [1] (18 июня 2021 г . ) [±] |
Репозиторий | |
Написано в | C |
Операционная система | Кроссплатформенность |
Размер | 699 КБ |
Тип | СУБД ( встроенная ) |
Лицензия | Общественное достояние [2] |
Веб-сайт | SQLite |
Расширение имени файла | .sqlite3, .sqlite, .db |
---|---|
Тип интернет-СМИ | application/vnd.sqlite3 [3] |
Магическое число | 53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 00 ( ASCII с нулевым символом в конце "Формат SQLite 3") |
Первый выпуск | 2004-06-18 |
Открытый формат ? | да ( общественное достояние ) |
Веб-сайт | sqlite.org/fileformat2.html |
SQLite обычно следует синтаксису PostgreSQL . SQLite использует динамически и слабо типизированный синтаксис SQL , который не гарантирует целостность домена . [7] Это означает, что можно, например, вставить строку в столбец, определенный как целое число. SQLite попытается преобразовать данные между форматами, где это необходимо, в данном случае строку «123» в целое число, но не гарантирует такие преобразования и сохранит данные как есть, если такое преобразование невозможно.
SQLite - популярный выбор в качестве встроенного программного обеспечения базы данных для локального / клиентского хранилища в прикладном программном обеспечении, таком как веб-браузеры . Это, пожалуй, наиболее широко распространенный механизм баз данных , поскольку он используется сегодня , среди прочего, несколькими широко распространенными браузерами, операционными системами и встроенными системами (такими как мобильные телефоны). [8] SQLite привязан ко многим языкам программирования.
Дизайн
В отличие от систем управления базами данных клиент-сервер, механизм SQLite не имеет автономных процессов, с которыми взаимодействует прикладная программа. Вместо этого, SQLite библиотека будет связана с и , таким образом , становится неотъемлемой частью прикладной программы. Связывание может быть статическим или динамическим . Прикладная программа использует функциональность SQLite посредством простых вызовов функций , которые сокращают задержку при доступе к базе данных: вызовы функций в рамках одного процесса более эффективны, чем взаимодействие между процессами .
SQLite хранит всю базу данных (определения, таблицы, индексы и сами данные) в виде единого кроссплатформенного файла на хост-машине. Он реализует эту простую конструкцию, блокируя весь файл базы данных во время записи. Операции чтения SQLite могут быть многозадачными, хотя запись может выполняться только последовательно.
Из-за безсерверной конструкции приложения SQLite требуют меньше настроек, чем клиент-серверные базы данных. SQLite называется zero-conf [9], потому что он не требует управления службами (например, сценариев запуска) или контроля доступа на основе GRANT и паролей. Управление доступом осуществляется с помощью разрешений файловой системы, предоставленных самому файлу базы данных. Базы данных в клиент-серверных системах используют разрешения файловой системы, которые предоставляют доступ к файлам базы данных только процессу-демону.
Еще одно следствие бессерверной архитектуры состоит в том, что некоторые процессы не могут выполнять запись в файл базы данных. В серверных базах данных несколько писателей будут подключаться к одному и тому же демону, который может обрабатывать свои блокировки изнутри. SQLite, с другой стороны, должен полагаться на блокировки файловой системы. Ему меньше известно о других процессах, одновременно обращающихся к базе данных. Поэтому SQLite не является предпочтительным выбором для развертываний с интенсивной записью. [10] Однако для простых запросов с небольшим параллелизмом производительность SQLite возрастает за счет избежания накладных расходов на передачу данных другому процессу.
SQLite использует PostgreSQL в качестве эталонной платформы. «Что сделал бы PostgreSQL» используется для понимания стандарта SQL. [11] [12] Одним из основных отклонений является то, что, за исключением первичных ключей , SQLite не требует проверки типов ; тип значения является динамическим и не ограничивается строго схемой (хотя схема инициирует преобразование при сохранении, если такое преобразование потенциально обратимо). SQLite стремится следовать правилам Постела . [13]
История
Д. Ричард Хипп разработал SQLite весной 2000 года, работая в General Dynamics по контракту с ВМС США . [14] Хипп разрабатывал программное обеспечение, используемое для системы контроля повреждений на борту эсминцев с управляемыми ракетами , которые первоначально использовали HP-UX с серверной частью базы данных IBM Informix . SQLite начинался как расширение Tcl . [15]
Цели разработки SQLite заключались в том, чтобы позволить программе работать без установки системы управления базами данных и без использования администратора базы данных . Hipp основал синтаксис и семантику на PostgreSQL 6.5. В августе 2000 года была выпущена версия 1.0 SQLite с хранилищем на основе gdbm (GNU Database Manager). SQLite 2.0 заменил gdbm пользовательской реализацией B-дерева , добавив возможности транзакций . SQLite 3.0, частично финансируемый America Online , добавил интернационализацию , манифестную типизацию и другие важные улучшения.
В 2011 году Хипп объявил о своих планах добавить интерфейс NoSQL (управление документами, выраженными в JSON ) к базам данных SQLite и разработать UnQLite , встраиваемую базу данных, ориентированную на документы . [16]
SQLite - один из четырех форматов, рекомендуемых для длительного хранения наборов данных, одобренных для использования Библиотекой Конгресса . [17] [18] [19]
Функции
SQLite реализует большую часть стандарта SQL-92 для SQL , но не имеет некоторых функций. Например, он только частично предоставляет триггеры и не может выполнять запись в представления (однако он предоставляет триггеры INSTEAD OF, которые обеспечивают эту функциональность). Хотя он предоставляет сложные запросы, он по-прежнему имеет ограниченную функцию ALTER TABLE , поскольку не может изменять или удалять столбцы. [20] Это изменилось в версии 3.25.0 с поддержкой ALTER TABLE RENAME COLUMN и версии 3.35.0 с ALTER TABLE DROP COLUMN. [21]
SQLite использует необычную систему типов для SQL-совместимой СУБД: вместо присвоения типа столбцу, как в большинстве систем баз данных SQL, типы присваиваются отдельным значениям; с точки зрения языка он динамически типизирован . Более того, он слабо типизирован некоторыми из тех же способов, что и Perl : можно вставить строку в целочисленный столбец (хотя SQLite сначала попытается преобразовать строку в целое число, если предпочтительный тип столбца целочисленный). Это добавляет гибкости столбцам, особенно когда они привязаны к динамически типизированному языку сценариев. Однако этот метод нельзя переносить на другие продукты SQL. Распространенной критикой является то, что системе типов SQLite не хватает механизма целостности данных, обеспечиваемого статически типизированными столбцами в других продуктах. На веб-сайте SQLite описан режим «строгой привязки», но эта функция еще не добавлена. [13] Однако его можно реализовать с такими ограничениями, как CHECK(typeof(x)='integer')
. [14]
Таблицы обычно включают скрытый столбец индекса rowid , что обеспечивает более быстрый доступ. [22] Если база данных включает в себя столбец Целочисленного Первичного ключа, SQLite , как правило , оптимизировать его путем обработки его в качестве псевдонима для ROWID , в результате чего содержимое будут храниться в строго типизированном 64-битном подписанном целом числе и изменения его поведения , чтобы быть несколько , как столбец с автоинкрементом. Будущее [ когда? ] версии SQLite могут включать команду для анализа того, имеет ли столбец поведение, подобное rowid, чтобы отличать эти столбцы от слабо типизированных целочисленных первичных ключей без автоинкремента. [23] [ неудачная проверка ]
SQLite с полной функцией Unicode не является обязательным. [24]
Несколько компьютерных процессов или потоков могут одновременно обращаться к одной и той же базе данных. Параллельно могут выполняться несколько доступов для чтения. Доступ на запись может быть удовлетворен только в том случае, если в настоящее время не обслуживаются другие обращения. В противном случае доступ на запись завершится сбоем с кодом ошибки (или может быть автоматически повторен, пока не истечет настраиваемый тайм-аут). Эта ситуация одновременного доступа изменится при работе с временными таблицами. Это ограничение ослаблено в версии 3.7, когда включено ведение журнала упреждающей записи (WAL), что позволяет выполнять одновременные операции чтения и записи. [25]
Версия 3.6.19, выпущенная 14 октября 2009 г., добавила поддержку ограничений внешнего ключа. [26] [27]
В SQLite версии 3.7.4 впервые был добавлен модуль FTS4 (полнотекстовый поиск), который имеет усовершенствования по сравнению со старым модулем FTS3. [28] FTS4 позволяет пользователям выполнять полнотекстовый поиск документов аналогично тому, как поисковые системы выполняют поиск на веб-страницах. [29] В версии 3.8.2 добавлена поддержка создания таблиц без rowid , [30] что может обеспечить увеличение пространства и производительности. [31] Поддержка общих табличных выражений была добавлена в SQLite в версии 3.8.3. [32]
В 2015 году с расширением json1 [33] и новыми интерфейсами подтипов в SQLite версии 3.9 было введено управление содержимым JSON .
Согласно версии 3.33.0, максимальный поддерживаемый размер базы данных составляет 281 ТБ.
Разработка и распространение
Код SQLite размещен в Fossil , распределенной системе контроля версий, которая сама построена на базе данных SQLite. [34]
Автономная программа командной строки входит в состав SQLite. Его можно использовать для создания базы данных, определения таблиц, вставки и изменения строк, выполнения запросов и управления файлом базы данных SQLite. Он также служит примером для написания приложений, использующих библиотеку SQLite.
SQLite использует автоматическое регрессионное тестирование перед каждым выпуском. В рамках проверки релиза выполняется более 2 миллионов тестов [ необходима ссылка ] . Начиная с выпуска SQLite 3.6.17 от 10 августа 2009 г., выпуски SQLite имеют 100% покрытие ветвями тестирования, что является одним из компонентов покрытия кода . Тесты и средства тестирования частично являются общественным достоянием и частично проприетарными . [35]
Известные применения
ПО промежуточного слоя
- Адаптер ADO.NET , первоначально разработанный Робертом Симпсоном, поддерживается совместно с разработчиками SQLite с апреля 2010 года. [36]
- Драйвер ODBC был разработан и поддерживается отдельно Кристианом Вернером. [37] Драйвер ODBC Вернера является рекомендуемым методом подключения для доступа к SQLite из OpenOffice.org . [38]
- Оболочка COM ( ActiveX ), делающая SQLite доступным в Windows для языков сценариев, таких как JScript и VBScript . Это добавляет возможности базы данных SQLite в приложения HTML (HTA). [39]
Веб-браузеры
- Браузеры Google Chrome , Opera , Safari и Android Browser позволяют хранить информацию и извлекать ее из базы данных SQLite в браузере, используя технологию Web SQL Database , хотя она быстро устаревает (а именно заменяется IndexedDB ) . Внутренне эти браузеры на основе Chromium используют базы данных SQLite для хранения данных конфигурации, таких как история посещений сайта, файлы cookie, история загрузок и т. Д. [40]
- Mozilla Firefox и Mozilla Thunderbird хранят различные данные конфигурации (закладки, файлы cookie, контакты и т. Д.) Во внутренне управляемых базах данных SQLite. До версии 57 Firefox ( «Firefox Quantum» ) существовала сторонняя надстройка, которая использовала API, поддерживающий эту функциональность, для предоставления пользовательского интерфейса для управления произвольными базами данных SQLite. [41]
- Некоторые сторонние надстройки могут использовать API JavaScript для управления базами данных SQLite. [42] [43]
Фреймворки веб-приложений
- Laravel
- Bugzilla
- Система управления базами данных по умолчанию в Django
- Drupal
- Trac
- Система управления базами данных по умолчанию в Ruby on Rails
- web2py
Разные
- Adobe Systems использует SQLite в качестве формата файла в Adobe Photoshop Lightroom , стандартной базе данных в Adobe AIR , а также внутри Adobe Reader . [15]
- Как и в большинстве программ Apple, Apple Photos использует SQLite под капотом. [44]
- Audacity использует SQLite в качестве формата файла, начиная с версии 3.0.0. [45]
- Evernote использует SQLite для хранения своего локального репозитория базы данных в Windows.
- Skype [46]
- Средство управления услугами , используемое для управления услугами в операционных системах Solaris и OpenSolaris.
- Flame (вредоносное ПО)
- Система спутниковой навигации BMW IDrive
- Системы TomTom GPS для картографических данных NDS
Операционные системы
SQLite по умолчанию включен в: [15]
- ОС Blackberry BlackBerry 10
- ОС Symbian
- Maemo от Nokia
- Android от Google
- MeeGo от Linux Foundation
- WebOS от LG
- NetBSD
- FreeBSD, начиная с версии 10-RELEASE в январе 2014 года, используется системой управления основными пакетами.
- иллюзия
- Oracle Solaris 10, где база данных Service Management Facility сериализована для загрузки.
- Apple , принял его в качестве опции в MacOS «ы Core Data API от первоначальной реализации в Mac OS X 10.4 и далее, а также для введения видео и песни, и в прошивкой для хранения текстовых сообщений на iPhone . [47]
- MorphOS с версии 3.10
- Tizen
- Windows 10 [48]
Поддержка языков программирования
Существуют языковые привязки к SQLite для большого количества языков программирования , в том числе:
- Ада [49]
- AppleScript
- AutoIt [50]
- различные диалекты BASIC, включая FreeBASIC , PureBasic , RFO BASIC! , Visual Basic и Xojo
- C
- C #
- C ++
- Клипер / Гавань
- Завиток
- D
- Delphi
- Эликсир
- Emacs Lisp [51]
- F # [52]
- Идти
- Haskell
- Haxe
- Java (на JVM и DVM )
- JavaScript [53]
- Котлин
- Юлия
- Диалекты Лиспа, такие как Common Lisp , newLisp , OpenLisp
- Стенограмма (в LiveCode )
- LabVIEW
- Lua
- MATLAB
- Ним
- Objective-C (в macOS и iOS )
- OCaml
- несколько разновидностей Паскаля, включая Free Pascal , Component Pascal и Delphi
- Perl [54]
- PHP
- Щука
- Python [55]
- р
- Ракетка [56]
- REBOL
- Рубин [57]
- Ржавчина [58]
- Схема
- Болтовня
- Swift (в macOS и iOS )
- Tcl
- Xojo
Смотрите также
- Сравнение систем управления реляционными базами данных
- Список систем управления реляционными базами данных
- SpatiaLite
- Соответствие SQL
Рекомендации
Цитаты
- ^ «SQLite Release 3.36.0 на 2021-06-18» . Проверено 18 июня 2021 года .
- ^ «Авторские права на SQLite» . sqlite.org . Проверено 17 мая 2010 года .
- ^ «Тип носителя формата файла базы данных SQLite в IANA» . Управление по присвоению номеров в Интернете . IANA . Проверено 8 марта 2019 .
- ^ «Почему SQLite преуспел как база данных - Ричард Хипп, создатель SQLite» . Журнал изменений . Эпизод 201. Событие происходит в 00:17:25.
Как мне произнести название продукта? Я говорю SQL-ите, как минерал.
- ^ Д. Ричард Хипп (ведущий) (31 мая 2006 г.). Введение в SQLite (видео) . Событие Google Inc. происходит в 00:01:14 . Проверено 23 марта 2010 года .
[...] эсс-кью-эллит [...]
- ^ Д. Ричард Хипп (ведущий) (31 мая 2006 г.). Введение в SQLite . Событие Google Inc. происходит в 00:48:15 . Проверено 23 марта 2010 года .
[...] продолжение [...]
- ^ Оуэнс, Майкл (2006). «Глава 4: SQL». В Гилморе, Джейсон; Томас, Кейр (ред.). Полное руководство по SQLite . Д. Ричард Хипп (предисловие), Престон Хагар (технический рецензент). Апресс . п. 133. ISBN. 978-1-59059-673-9. Проверено 30 декабря 2014 .
- ^ «Оценки наиболее широко используемых баз данных SQL» . SQLite.org . Проверено 11 мая 2011 года .
- ^ «SQLite - это база данных без конфигурации» . SQLite.org . Проверено 3 августа 2015 года .
- ^ «Соответствующее использование SQLite» . SQLite.org . Проверено 3 сентября 2015 .
- ^ «PGCon 2014: Кластеризация и ВОДКА» . Lwn.net . Проверено 6 января 2017 .
- ^ «PGCon2014: SQLite: протеже PostgreSQL» . Pgcon.org . Проверено 6 января 2017 .
- ^ а б «SQLite: StrictMode» . Sqlite.org . Проверено 3 сентября 2015 года .
- ^ а б Оуэнс, Майкл (2006). Полное руководство по SQLite . Апресс . DOI : 10.1007 / 978-1-4302-0172-4_1 . ISBN 978-1-59059-673-9.
- ^ а б в «Известные пользователи SQLite» . SQLite . Проверено 5 августа 2015 года .
- ^ «Интервью: Ричард Хипп о UnQL, новом языке запросов для баз данных документов» . InfoQ. 4 августа 2011 . Проверено 5 октября 2011 года .
- ^ «Рекомендуемый формат хранения LoC» . www.sqlite.org . Проверено 9 апреля 2020 .
- ^ «SQLite, версия 3» . www.loc.gov . 2017-03-28 . Проверено 9 апреля 2020 .
- ^ «Заявление о рекомендуемых форматах - наборы данных / базы данных» . Библиотека Конгресса . Проверено 9 апреля 2020 .
- ^ «Функции SQL, которые не реализованы в SQLite» . SQLite.org. 1 января 2009 . Проверено 14 октября 2009 года .
- ^ https://www.sqlite.org/changes.html
- ^ «SQL в понимании SQLite» . SQLite . Проверено 21 мая 2018 .
Поиск записи с определенным идентификатором строки или всех записей с идентификатором строки в указанном диапазоне примерно в два раза быстрее, чем аналогичный поиск, выполняемый с указанием любого другого ПЕРВИЧНОГО КЛЮЧА или индексированного значения.
- ^ «SQLite: регистрация [2494132a]» . www.sqlite.org . 2017-11-28.
Добавьте команду «PRAGMA table_ipk (TABLE)» для ознакомительных целей.
- ^ «Сопоставление символов Unicode без учета регистра не работает» . Часто задаваемые вопросы по SQLite . Проверено 3 сентября 2015 .
- ^ «Запись с упреждающим ведением журнала в SQLite 3.7» . SQLite.org . Проверено 3 сентября 2011 года .
WAL обеспечивает больший параллелизм, поскольку средства чтения не блокируют средства записи, а средство записи не блокирует средства чтения. Чтение и письмо могут выполняться одновременно.
- ^ Карвин, Билл (май 2010 г.). Картер, Жаклин (ред.). SQL Antipatterns: как избежать ловушек программирования баз данных . Прагматическая книжная полка. п. 70. ISBN 978-1-934356-55-5.
Иногда вы вынуждены использовать бренд базы данных, который не поддерживает ограничения внешнего ключа (например, механизм хранения MySQL MyISAM или SQLite до версии 3.6.19).
- ^ «SQLite Release 3.6.19 от 14.10.2009» .
- ^ «SQLite Release 3.7.4 от 08.12.2010» . SQLite.org. 8 декабря 2010 . Проверено 3 сентября 2015 года .
- ^ «Расширения SQLite FTS3 и FTS4» . SQLite.org . Проверено 3 сентября 2015 года .
- ^ «Релиз SQLite 3.8.2 от 06.12.2013» . SQLite.org. 6 декабря 2013 . Проверено 3 сентября 2015 года .
- ^ «Оптимизация БЕЗ ROWID» . SQLite.org . Проверено 3 сентября 2015 года .
- ^ «SQLite Release 3.8.3 от 03.02.2014» . SQLite.org. 3 февраля 2014 . Проверено 3 сентября 2015 года .
- ^ «Расширение JSON1» . SQLite.org .
- ^ «Ископаемое: Ископаемое представление» . Fossil-scm.org. 23 августа 2009 . Проверено 12 сентября 2009 года .
- ^ «Как тестируется SQLite» . SQLite.org . Проверено 12 сентября 2009 года .
- ^ «Дом» . System.Data.SQLite . 2016-12-30 . Проверено 6 января 2017 .
- ^ «Драйвер SQLite ODBC» . Ch-werner.de . 2016-12-01 . Проверено 6 января 2017 .
- ^ «Использование базы данных SQLite с OpenOffice.org: версия 2.0» (PDF) . Documentation.openoffice.org . Проверено 6 января 2017 .
- ^ "sqlite - оболочки Sqlite" . SQLite.org. 7 февраля 2009 . Проверено 7 февраля 2009 года .
- ^ «Расположение истории Google Chrome» . www.foxtonforensics.com . 2020-10-06 . Проверено 6 октября 2020 .
- ^ «SQLite Manager :: Дополнения для Firefox» . Addons.mozilla.org . 2015-02-28. Архивировано из оригинала на 2017-01-02 . Проверено 6 января 2017 .
- ^ «SQLite Manager - загрузите это расширение для 🦊 Firefox (en-US)» . Addons.mozilla.org . 2018-07-24 . Проверено 5 октября 2018 .
- ^ «SQLite Reader - загрузите это расширение для 🦊 Firefox (en-US)» . Addons.mozilla.org . 2018-09-01 . Проверено 5 октября 2018 .
- ^ «Использование SQL для поиска моей лучшей фотографии пеликана по версии Apple Photo» . Веблог Саймона Уиллисона . Проверено 23 мая 2020 года .
- ^ «Выпущена Audacity 3.0.0» . Проверено 17 марта 2021 года .
- ^ Хинегарднер, Джереми (28 августа 2007 г.). "Skype-клиент, использующий SQLite?" . sqlite-users (Список рассылки). Архивировано из оригинала на 2007-11-17 . Проверено 14 июня 2010 года .
- ^ «Показать список истории загрузок всех файлов, когда-либо загруженных в Mac OS X» . Osxdaily.com . 2012-07-12 . Проверено 6 января 2017 .
- ^ «Базы данных SQLite» . msdn.microsoft.com . 2016-09-19 . Проверено 6 января 2017 .
- ^ "Программирование на Аде / Библиотеки / База данных" .
- ^ «Функции, определяемые пользователем» . Autoitscript.com . Проверено 6 января 2017 .
- ^ «API SQLite3 для GNU Emacs 25+» . github.com . Проверено 2 октября 2017 .
- ^ Росс МакКинли; Колин Булл. «SQLProvider» . Fsprojects.github.io . Проверено 6 января 2017 .
- ^ «Архив Google Code - долгосрочное хранилище для хостинга проектов Google Code» . Code.google.com . Проверено 6 января 2017 .
- ^ Адам Кеннеди. «DBD :: SQLite - Автономная СУБД в драйвере DBI» . Metacpan.org . Проверено 6 января 2017 .
- ^ «Документы Python» . docs.python.org . Проверено 3 августа 2020 .
- ^ «БД: подключение к базе данных» . docs.racket-lang.org . Проверено 7 апреля 2020 .
- ^ «RubyForge: SQLite-Ruby: информация о проекте» . Архивировано из оригинала на 2010-04-17 . Проверено 3 апреля 2010 .
- ^ «Rusqlite - эргономичная оболочка для использования SQLite от Rust» .
Источники
- Аллен, Грант; Оуэнс, Майк (5 ноября 2010 г.). Полное руководство по SQLite (2-е изд.). Апресс . п. 368. ISBN 978-1-4302-3225-4.
- Крейбич, Джей А. (17 августа 2010 г.). Использование SQLite (1-е изд.). O'Reilly Media . п. 528. ISBN 978-0-596-52118-9.
- Ньюман, Крис (9 ноября 2004 г.). SQLite (Библиотека разработчика) (1-е изд.). Sams . п. 336. ISBN. 0-672-32685-X.
Внешние ссылки
- Официальный веб-сайт
- SQLite в Curlie
- Введение в SQLite на YouTube, автор Д. Ричард Хипп из Google
- Учебное пособие по SQLite
- SQLite на Devopedia
- Изучить SQLite