Отличительные особенности SQLite
На этой странице выделены некоторые особенности SQLite, которые отличаются от многих других SQL-движков баз данных.
Без конфигурации
SQLite не нужно «устанавливать» перед использованием. Нет процедуры «настройки». Нет процесса сервера, который нужно запускать, останавливать или настраивать. Нет необходимости администратору создавать новый экземпляр базы данных или назначать права доступа пользователям. SQLite не использует файлы конфигурации. Не нужно ничего делать, чтобы сообщить системе, что SQLite работает. Не требуется никаких действий для восстановления после сбоя системы или отключения питания. Нет проблем с отладкой.SQLite просто работает.
Другие, более привычные движки баз данных работают отлично, как только вы их настроите. Но начальная установка и настройка могут быть пугающе сложными.
Без сервера
(См. также страницу документации без сервера.)
Большинство SQL-движков баз данных реализованы как отдельный процесс сервера. Программы, которые хотят получить доступ к базе данных, общаются с сервером с помощью какого-либо межпроцессного взаимодействия (обычно TCP/IP), отправляя запросы на сервер и получая результаты. SQLite работает не так. С SQLite процесс, который хочет получить доступ к базе данных, читает и записывает данные непосредственно из файлов базы данных на диске. Нет промежуточного процесса сервера.
Преимущества и недостатки отсутствия сервера. Главное преимущество заключается в том, что нет отдельного процесса сервера, который нужно устанавливать, настраивать, инициализировать, управлять и отлаживать. Это одна из причин, по которой SQLite является «безконфигурационным» движком баз данных. Программы, использующие SQLite, не нуждаются в административной поддержке для настройки движка базы данных перед запуском. Любая программа, способная получить доступ к диску, может использовать базу данных SQLite.
С другой стороны, движок базы данных, использующий сервер, может обеспечить лучшую защиту от ошибок в клиентском приложении — случайные указатели в клиенте не могут повредить память на сервере. И поскольку сервер — это единственный постоянный процесс, он может управлять доступом к базе данных с большей точностью, позволяя более тонкое блокирование и лучшую конкуретность.
Большинство SQL-движков баз данных основаны на клиенте/сервере. Из тех, что не используют сервер, SQLite — единственный известный автору, который позволяет нескольким приложениям одновременно получать доступ к одной и той же базе данных.
Единственный файл базы данных
База данных SQLite — это один обычный файл на диске, который может находиться в любой части иерархии каталогов. Если SQLite может читать файл на диске, значит, он может прочитать все в базе данных. Если файл на диске и его каталог доступны для записи, SQLite может изменить все в базе данных. Файлы базы данных легко копировать на USB-накопитель или отправлять по электронной почте для совместного использования.Другие SQL-движки баз данных обычно хранят данные как большую коллекцию файлов. Часто эти файлы находятся в стандартном расположении, доступном только самому движку базы данных. Это делает данные более безопасными, но также затрудняет доступ к ним. Некоторые SQL-движки баз данных предлагают возможность записи непосредственно на диск, минуя файловую систему. Это обеспечивает дополнительную производительность, но с существенной сложностью настройки и обслуживания.
Стабильный кроссплатформенный файл базы данных
Формат файла SQLite кроссплатформенный. Файл базы данных, созданный на одной машине, можно скопировать и использовать на другой машине с другой архитектурой. Порядок следования байтов (big-endian или little-endian), 32-битная или 64-битная архитектура не имеет значения. Все машины используют один и тот же формат файла. Кроме того, разработчики пообещали поддерживать стабильность формата файла и обратную совместимость, поэтому более новые версии SQLite могут читать и записывать более старые файлы базы данных.Большинство других SQL-движков баз данных требуют создания резервной копии и восстановления базы данных при переходе с одной платформы на другую, а также при обновлении до новой версии ПО.
Компактный
При оптимизации размера вся библиотека SQLite со всем включенным функционалом имеет размер менее 1 МБ (измеряется на ix86 с помощью утилиты «size» из набора компиляторов GNU). Необходимые функции могут быть отключены во время компиляции, чтобы еще больше уменьшить размер библиотеки.Большинство других SQL-движков баз данных намного больше. IBM заявляет, что недавно выпущенный движок базы данных CloudScape «всего лишь» 2МБ JAR-файл — на порядок больше, чем SQLite, даже после сжатия! Firebird утверждает, что его клиентская библиотека составляет всего 350 КБ. Это такой же размер, как у SQLite, и даже не содержит движок базы данных. Библиотека Berkeley DB от Oracle имеет размер 450 КБ, и она не поддерживает SQL, предоставляя программисту только простые пары ключ/значение.
Явное определение типов данных
Большинство SQL-движков баз данных используют статическую типизацию. Тип данных ассоциируется с каждым столбцом в таблице, и только значения этого конкретного типа данных могут быть сохранены в этом столбце. SQLite ослабляет это ограничение, используя явную типизацию. При явной типизации тип данных является свойством самого значения, а не столбца, в котором хранится значение. Таким образом, SQLite позволяет пользователю хранить любое значение любого типа в любом столбце независимо от объявленного типа этого столбца. (Есть некоторые исключения из этого правила: столбец INTEGER PRIMARY KEY может хранить только целые числа. И SQLite пытается привести значения к объявленному типу данных столбца, когда это возможно.)Насколько нам известно, спецификация языка SQL допускает использование явной типизации. Тем не менее, большинство других SQL-движков баз данных используют статическую типизацию, и поэтому некоторые люди считают, что использование явной типизации является ошибкой в SQLite. Но авторы SQLite очень убеждены, что это функция. Использование явной типизации в SQLite — это осознанное конструкторское решение, которое на практике доказало, что делает SQLite более надежным и удобным в использовании, особенно при использовании с динамически типизированными языками программирования, такими как Tcl и Python.
Записи переменной длины
Большинство других SQL-движков баз данных выделяют фиксированный объем дискового пространства для каждой строки в большинстве таблиц. Они применяют специальные методы для обработки BLOB и CLOB, которые могут иметь различную длину. Но для большинства таблиц, если вы объявляете столбец VARCHAR(100), движок базы данных выделит 100 байтов дискового пространства независимо от того, сколько информации вы фактически храните в этом столбце.SQLite, в отличие от этого, использует только тот объем дискового пространства, который фактически необходим для хранения информации в строке. Если вы храните один символ в столбце VARCHAR(100), то используется только один байт дискового пространства. (Фактически два байта — есть некоторый накладные расходы в начале каждого столбца для записи его типа данных и длины.)
Использование записей переменной длины в SQLite имеет ряд преимуществ. Это очевидно приводит к меньшим файлам базы данных. Это также ускоряет работу базы данных, так как требуется перемещать меньше информации на диск и с него. И использование записей переменной длины делает возможным использование явной типизации вместо статической типизации в SQLite.
Читаемый исходный код
Исходный код SQLite разработан таким образом, чтобы его мог прочитать и понять среднестатистический программист. Все процедуры, структуры данных и многие автоматические переменные тщательно прокомментированы полезной информацией о том, что они делают. Штампованные комментарии опущены.
SQL-запросы компилируются в код виртуальной машины
Каждый SQL-движок базы данных компилирует каждый SQL-запрос в некую внутреннюю структуру данных, которая затем используется для выполнения запроса. Но в большинстве SQL-движков внутренняя структура данных представляет собой сложную сеть взаимосвязанных структур и объектов. В SQLite скомпилированная форма запросов представляет собой короткую программу в представлении, похожем на машинный язык. Пользователи базы данных могут просмотреть этот язык виртуальной машины, добавив ключевое слово EXPLAIN перед запросом.Использование виртуальной машины в SQLite принесло большую пользу в разработке библиотеки. Виртуальная машина предоставляет четкий и определенный разделитель между передней частью SQLite (частью, которая анализирует SQL-запросы и генерирует код виртуальной машины) и задней частью (частью, которая выполняет код виртуальной машины и вычисляет результат). Виртуальная машина позволяет разработчикам ясно и легко читаемо видеть, что SQLite пытается сделать с каждым скомпилированным запросом, что очень помогает в отладке. В зависимости от того, как это скомпилировано, SQLite также может отслеживать выполнение виртуальной машины — печатать каждую инструкцию виртуальной машины и ее результат по мере его выполнения.
Общественное достояние
Исходный код SQLite находится в общественном достоянии. Никаких прав авторских на любую часть исходного кода не предъявляется. (Документация и тестовый код — это другое дело — некоторые части документации и тестовой логики регулируются лицензиями с открытым исходным кодом.) Все участники разработки ядра SQLite подписали заявления, в которых конкретно отрицается любое авторское право на код. Это означает, что любой может законно делать с исходным кодом SQLite все, что захочет.Существуют и другие SQL-движки баз данных с либеральными лицензиями, которые позволяют широко и свободно использовать код. Но эти другие движки все еще регулируются законами об авторском праве. SQLite отличается тем, что законы об авторском праве просто не применяются.
Файлы исходного кода других SQL-движков баз данных обычно начинаются с комментария, описывающего ваши права на просмотр и копирование этого файла. Исходный код SQLite не содержит лицензии, так как не регулируется законами об авторском праве. Вместо лицензии исходный код SQLite предлагает благословение:
Да будет добро, а не зло;
Да найдете вы прощение для себя и прощайте других;
Да будете делиться свободно, никогда не беря больше, чем даете.
Расширения языка SQL
SQLite предоставляет ряд улучшений языка SQL, которые обычно не встречаются в других движках баз данных. Ключевое слово EXPLAIN и явная типизация уже упоминались выше. SQLite также предоставляет такие операторы, как REPLACE и предложение ON CONFLICT, которые позволяют дополнительно управлять разрешением конфликтов ограничений. SQLite поддерживает команды ATTACH и DETACH, которые позволяют использовать несколько независимых баз данных вместе в одном запросе. И SQLite определяет API, которые позволяют пользователю добавлять новые SQL-функции и алгоритмы сортировки.
Эта страница в последний раз изменялась 08.05.2024 11:54:12 UTC
SQLite is in the Public Domain.
https://sqlite.org/different.html