Из Википедии, свободной энциклопедии
Перейти к навигации Перейти к поиску

SQLite ( / ˌ ɛ с ˌ к Ju ˌ ɛ л т / , [4] [5] / с я к ш ə ˌ л т / [6] ) является системой управления реляционной базы данных (СУБД) , содержащаяся в C библиотека . В отличие от многих других систем управления базами данных, SQLite не является механизмом базы данных клиент-сервер . Скорее, он встроен в конечную программу.

SQLite совместим с ACID и реализует большую часть стандарта SQL , как правило, следуя синтаксису 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. До Firefox версии 57 ( «Firefox Quantum» ) существовала сторонняя надстройка, которая использовала код, поддерживающий эту функциональность, для предоставления пользовательского интерфейса для управления произвольными базами данных 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]
  • 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

Ссылки [ править ]

Цитаты [ править ]

  1. ^ «SQLite Release 3.35.3 на 2021-03-26» . Проверено 27 марта 2021 года .
  2. ^ "Авторские права SQLite" . sqlite.org . Проверено 17 мая 2010 года .
  3. ^ "Тип носителя формата файла базы данных SQLite в IANA" . Управление по присвоению номеров в Интернете . IANA . Проверено 8 марта 2019 .
  4. ^ «Почему SQLite преуспел как база данных - Ричард Хипп, создатель SQLite» . Журнал изменений . Эпизод 201. Событие происходит в 00:17:25. Как мне произнести название продукта? Я говорю SQL-ите, как минерал.
  5. Д. Ричард Хипп (ведущий) (31 мая 2006 г.). Введение в SQLite (видео) . Событие Google Inc. происходит в 00:01:14 . Проверено 23 марта 2010 года . [...] эсс-кью-эллит [...]
  6. Д. Ричард Хипп (ведущий) (31 мая 2006 г.). Введение в SQLite . Событие Google Inc. происходит в 00:48:15 . Проверено 23 марта 2010 года . [...] продолжение [...]
  7. ^ Оуэнс, Майкл (2006). «Глава 4: SQL». В Гилморе, Джейсон; Томас, Кейр (ред.). Полное руководство по SQLite . Д. Ричард Хипп (предисловие), Престон Хагар (технический рецензент). Апресс . п. 133. ISBN. 978-1-59059-673-9. Проверено 30 декабря 2014 .
  8. ^ «Наиболее широко используемые оценки баз данных SQL» . SQLite.org . Проверено 11 мая 2011 года .
  9. ^ «SQLite - это база данных с нулевой конфигурацией» . SQLite.org . Проверено 3 августа 2015 года .
  10. ^ «Соответствующее использование SQLite» . SQLite.org . Проверено 3 сентября 2015 .
  11. ^ "PGCon 2014: Кластеризация и ВОДКА" . Lwn.net . Проверено 6 января 2017 .
  12. ^ "PGCon2014: SQLite: Protégé of PostgreSQL" . Pgcon.org . Проверено 6 января 2017 .
  13. ^ a b "SQLite: StrictMode" . Sqlite.org . Проверено 3 сентября 2015 года .
  14. ^ a b Оуэнс, Майкл (2006). Полное руководство по SQLite . Апресс . DOI : 10.1007 / 978-1-4302-0172-4_1 . ISBN 978-1-59059-673-9.
  15. ^ a b c "Известные пользователи SQLite" . SQLite . Проверено 5 августа 2015 года .
  16. ^ «Интервью: Ричард Хипп о UnQL, новом языке запросов для баз данных документов» . InfoQ. 4 августа 2011 . Проверено 5 октября 2011 года .
  17. ^ "Рекомендуемый формат хранения LoC" . www.sqlite.org . Проверено 9 апреля 2020 .
  18. ^ "SQLite, версия 3" . www.loc.gov . 2017-03-28 . Проверено 9 апреля 2020 .
  19. ^ «Заявление о рекомендуемых форматах - наборы данных / базы данных» . Библиотека Конгресса . Проверено 9 апреля 2020 .
  20. ^ «Функции SQL, которые не реализованы в SQLite» . SQLite.org. 1 января 2009 . Проверено 14 октября 2009 года .
  21. ^ https://www.sqlite.org/changes.html
  22. ^ «SQL в понимании SQLite» . SQLite . Проверено 21 мая 2018 . Поиск записи с определенным идентификатором строки или всех записей с идентификатором строки в указанном диапазоне примерно в два раза быстрее, чем аналогичный поиск, выполняемый с указанием любого другого ПЕРВИЧНОГО КЛЮЧА или индексированного значения.
  23. ^ "SQLite: Регистрация [2494132a]" . www.sqlite.org . 2017-11-28. Добавьте команду «PRAGMA table_ipk (TABLE)» для ознакомительных целей.
  24. ^ «Сопоставление символов Unicode без учета регистра не работает» . Часто задаваемые вопросы по SQLite . Проверено 3 сентября 2015 .
  25. ^ «Запись в журнал в SQLite 3.7» . SQLite.org . Проверено 3 сентября 2011 года . WAL обеспечивает больший параллелизм, поскольку средства чтения не блокируют средства записи, а средство записи не блокирует средства чтения. Чтение и письмо могут выполняться одновременно.
  26. ^ Карвин, Билл (май 2010 г.). Картер, Жаклин (ред.). SQL Antipatterns: как избежать ловушек программирования баз данных . Прагматическая книжная полка. п. 70. ISBN 978-1-934356-55-5. Иногда вы вынуждены использовать бренд базы данных, который не поддерживает ограничения внешнего ключа (например, механизм хранения MySQL MyISAM или SQLite до версии 3.6.19).
  27. ^ «SQLite Release 3.6.19 от 14.10.2009» .
  28. ^ «SQLite Release 3.7.4 от 08.12.2010» . SQLite.org. 8 декабря 2010 . Проверено 3 сентября 2015 года .
  29. ^ «Расширения SQLite FTS3 и FTS4» . SQLite.org . Проверено 3 сентября 2015 года .
  30. ^ «SQLite Release 3.8.2 на 2013-12-06» . SQLite.org. 6 декабря 2013 . Проверено 3 сентября 2015 года .
  31. ^ "Оптимизация БЕЗ ROWID" . SQLite.org . Проверено 3 сентября 2015 года .
  32. ^ «SQLite Release 3.8.3 от 2014-02-03» . SQLite.org. 3 февраля 2014 . Проверено 3 сентября 2015 года .
  33. ^ «Расширение JSON1» . SQLite.org .
  34. ^ «Ископаемое: Ископаемое представление» . Fossil-scm.org. 23 августа 2009 . Проверено 12 сентября 2009 года .
  35. ^ «Как тестируется SQLite» . SQLite.org . Проверено 12 сентября 2009 года .
  36. ^ "Дом" . System.Data.SQLite . 2016-12-30 . Проверено 6 января 2017 .
  37. ^ "Драйвер SQLite ODBC" . Ch-werner.de . 2016-12-01 . Проверено 6 января 2017 .
  38. ^ «Использование базы данных SQLite с OpenOffice.org: версия 2.0» (PDF) . Documentation.openoffice.org . Проверено 6 января 2017 .
  39. ^ "sqlite - Sqlite Wrappers" . SQLite.org. 7 февраля 2009 . Проверено 7 февраля 2009 года .
  40. ^ «Расположение истории Google Chrome» . www.foxtonforensics.com . 2020-10-06 . Проверено 6 октября 2020 .
  41. ^ "SQLite Manager :: Дополнения для Firefox" . Addons.mozilla.org . 2015-02-28 . Проверено 6 января 2017 .
  42. ^ «SQLite Manager - Получите это расширение для 🦊 Firefox (en-US)» . Addons.mozilla.org . 2018-07-24 . Проверено 5 октября 2018 .
  43. ^ «SQLite Reader - загрузите это расширение для 🦊 Firefox (en-US)» . Addons.mozilla.org . 2018-09-01 . Проверено 5 октября 2018 .
  44. ^ «Использование SQL для поиска моей лучшей фотографии пеликана по версии Apple Photo» . Веблог Саймона Уиллисона . Проверено 23 мая 2020 года .
  45. ^ «Выпущена Audacity 3.0.0» . Проверено 17 марта 2021 года .
  46. ^ Hinegardner, Джереми (28 августа 2007). "Skype-клиент, использующий SQLite?" . sqlite-users (Список рассылки). Архивировано из оригинала на 2007-11-17 . Проверено 14 июня 2010 года .
  47. ^ «Показать список истории загрузок всех файлов, когда-либо загруженных в Mac OS X» . Osxdaily.com . 2012-07-12 . Проверено 6 января 2017 .
  48. ^ "Базы данных SQLite" . msdn.microsoft.com . 2016-09-19 . Проверено 6 января 2017 .
  49. ^ "Программирование на Аде / Библиотеки / База данных" .
  50. ^ «Функции, определяемые пользователем» . Autoitscript.com . Проверено 6 января 2017 .
  51. ^ "SQLite3 API для GNU Emacs 25+" . github.com . Проверено 2 октября 2017 .
  52. ^ Росс МакКинли; Колин Булл. «SQLProvider» . Fsprojects.github.io . Проверено 6 января 2017 .
  53. ^ «Архив Google Code - Долгосрочное хранилище для хостинга проектов Google Code» . Code.google.com . Проверено 6 января 2017 .
  54. ^ Адам Кеннеди. «DBD :: SQLite - Автономная СУБД в драйвере DBI» . Metacpan.org . Проверено 6 января 2017 .
  55. ^ "Документы Python" . docs.python.org . Проверено 3 августа 2020 .
  56. ^ «БД: подключение к базе данных» . docs.racket-lang.org . Проверено 7 апреля 2020 .
  57. ^ "RubyForge: SQLite-Ruby: Информация о проекте" . Архивировано из оригинала на 2010-04-17 . Проверено 3 апреля 2010 .
  58. ^ «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