SQLite

Продукт
Разработчики: Ричард Хипп
Дата последнего релиза: 2022/11/21
Технологии: СУБД

Содержание

О продукте

SQLite — облегченная встраиваемая реляционная база данных. Исходный код библиотеки передан в общественное достояние. В 2005 году проект получил награду Google-O’Reilly Open Source Awards.

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

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

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

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

2022: SQLite 3.40

21 ноября 2022 года стало известно о том, что опубликован релиз SQLite 3.40, легковесной СУБД, оформленной в виде подключаемой библиотеки. Код SQLite распространяется как общественное достояние (public domain), т.е. может использоваться без ограничений и безвозмездно в любых целях. Финансовую поддержку разработчиков SQLite осуществляет специально созданный консорциум, в который входят такие компании, как Adobe, Oracle, Mozilla, Bentley и Bloomberg.

Иллюстрация:slide-share.ru

Основные изменения:

  • Реализована экспериментальная возможность компиляции SQLite в промежуточный код WebAssembly, способный запускаться в web-браузере и пригодный для организации работы с БД из web-приложений на языке JavaScript. Web-разработчикам предоставляется высокоуровневый объектно-ориентированный интерфейс для работы с данными в стиле sql.js или Node.js, обвязка над низкоуровневым C API и API на базе механизма Web Worker, позволяющий создавать асинхронные обработчики, выполняемые в отдельных потоках. Данные, которые web-приложения сохраняют в WASM-версии SQLite, могут быть сохранены на стороне клиента при помощи OPFS (Origin-Private FileSystem) или API window.localStorage.
  • Добавлено расширение recovery, предназначенное для восстановления данных из повреждённых файлов с БД. В интерфейсе командной строки для восстановления используется команда ".recover".
  • Улучшена работа планировщика запросов. Убраны ограничения при использовании индексов с таблицами, насчитывающими более 63 столбцов (ранее при операциях со столбцами, порядковый номер которых превышает 63, индексация не применялась). Улучшена индексация значений, используемых в выражениях. Прекращена загрузка с диска больших строк и блобов при обработке операторов NOT NULL и IS NULL. Исключена материализация представлений для которых полное сканирование выполняется только один раз.
  • В кодовой базе вместо типа "char *" для представления имён файлов задействован отдельный тип sqlite3_filename.
  • Добавлена внутренняя функция sqlite3_value_encoding().
  • Добавлен режим SQLITE_DBCONFIG_DEFENSIVE, запрещающий изменение версии схемы хранения данных.
  • В реализацию параметра "PRAGMA integrity_check" добавлены дополнительные проверки. Например, в таблицы без признака STRICT не должны содержать числовых значений в столбцах с типом TEXT и строковых значений с числами в столбцах с типом NUMERIC. Также добавлена проверка корректности порядка следования строк в таблицах с признаком "WITHOUT ROWID".
  • В выражении "VACUUM INTO" учтены настройки "PRAGMA synchronous".
  • Добавлена сборочная опция SQLITE_MAX_ALLOCATION_SIZE, позволяющая ограничить размер блоков при распределении памяти.
  • Встроенный в SQLite алгоритм генерации псевдослучайных чисел переведён с использования потокового шифра RC4 на Chacha20.
  • Разрешено использование в разных схемах данных индексов с одинаковыми именами.
  • Внесены оптимизации производительности, позволившие снизить нагрузку на CPU примерно на 1% при типовой активности[1].

2019: Возможность взлома iPhone через уязвимости в SQLite

16 августа 2019 года стало известно, что специалисты компании Check Point продемонстрировали, как можно взломать iPhone через ядро базы данных, которое использует iOS — SQLite. В этом случае хакеры смогут получить права администратора над устройством.

SQLite — распространенные базы данных. Они доступны в любой операционной системе, персональном компьютере и на мобильном телефоне. Пользователи SQLite — Windows 10, MacOS, iOS, Chrome, Safari, Firefox и Android. Контакты на вашем iPhone, некоторые из сохраненных паролей на вашем ноутбуке — вся эта информация c большой вероятностью хранится в базе данных SQLite.Российский рынок CRM-систем: оценки, тренды, крупнейшие поставщики и перспективы. Обзор TAdviser 148.9 т

Специалисты Check Point нашли несколько уязвимостей и изобрели способ их эксплуатации. Проще говоря, теперь стало возможным получение контроля над всем, что обращается к базам данных SQLite.

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

Исследователи Check Point продемонстрировали эти уязвимости двумя способами. В первом случае инженеры перехватили злоумышленника, который заразил тестируемое устройство популярным вредоносным ПО, известным как «похититель паролей». Когда вредоносная программа забирает сохраненный пароль с зараженного компьютера и отправляет его своему оператору, мы получаем контроль над самим оператором.

Вторая демонстрация была на iPhone, на операционной системе iOS. Специалистам удалось обойти доверенный механизм безопасной загрузки Apple и получить права администратора на последнем iPhone.

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

Компания Check Point надеется, что данное исследование подтолкнет мировое сообщество по кибербезопасности работать дальше над этими уязвимостями.

2016: SQLite 3.14.0

9 августа 2016 года стал доступен релиз SQLite 3.14.0.

Логотип версии, (2016)

Добавленные возможности и функции [2]:

  • Возможность создавать виртуальные таблицы без идентификаторов строк (режим "WITHOUT ROWID");
  • В планировщик запросов внесены изменения, позволившие задействовать оптимизации выражения "OR" в виртуальных таблицах при наличии нескольких операторов LIKE, GLOB, REGEXP и MATCH;
  • Добавлена виртуальная таблица CSV для упрощения импорта файлов в формате CSV;
  • Добавлена функция carray();
  • Добавлено загружаемое расширение vfsstat.c с VFS-прослойкой для сбора статистики о параметрах ввода/вывода;
  • Улучшен алгоритм выполнения запросов, содержащих выражения "ORDER BY" и "LIMIT";
  • Добавлен VFS "win32-none", который аналогичен "win32" за исключением того, что не использует блокировку файла;
  • Добавлена новая утилита командной строки dbhash для вычисления хэша SHA1 для схемы данных и содержимого БД;
  • Добавлена SQL-функция json_quote().

2015

SQLite 3.10.0

6 января 2015 года состоялся релиз SQLite 3.10.0, оформленной в виде подключаемой библиотеки[3].

Основные изменения

  • Обеспечена возможность использования операторов LIKE, GLOB и REGEXP с виртуальными таблицами;
  • В утилиту sqldiff добавлена опция "--transaction";
  • Реализованы новые интерфейсы sqlite3_db_cacheflush() и sqlite3_strlike();
  • При открытии символической ссылки на БД, обеспечивающие журналирование файлы теперь создаются в привязке к реальному имени файла, а не имени символической ссылки;
  • При использовании ввода/вывода с применением отображения в память (memory-mapped I/O), отображение теперь производится в режиме только на чтение, что не даёт возможности случайно изменить БД в случае переполнения буфера в приложении или проблем с указателями;
  • В расширение для работы с форматом JSON добавлены новые SQL-функции json_group_array() и json_group_object();
  • Добавлена сборочная опция SQLITE_LIKE_DOESNT_MATCH_BLOBS;
  • Внесена оптимизация производительности, ускорившая работу с БД на 2-3%;
  • В интерфейс командной строки добавлены новые команды ".changes ON|OFF" и ".vfsinfo".

SQLite 3.8.11

30 июля 2015 года стало известно о публикации релиза SQLite 3.8.11[4].

Вслед за ним вышел корректирующий релиз 3.8.11.1 для легковесной системы управления базами данных, оформленной в виде подключаемой библиотеки.

Тестирование нагрузки SQLite на ЦП, 2015

В новом релизе:

  • Добавлено экспериментальное расширение RBU (Resumable Bulk Update), предназначенное для организации быстрых инкрементальных обновлений больших наборов данных;
  • Добавлено экспериментальное расширение FTS5 с новой реализацией системы полнотекстового поиска;
  • В расширение spellfix1 добавлена поддержка выражения "ON CONFLICT";
  • В операторе "IS" реализована возможность использования индексов;
  • Улучшена работа планировщика запросов в плане автоматической индексации подзапросов, заданных в блоке FROM;
  • Добавлена команда "PRAGMA cell_size_check" для выявления повреждения файла БД на ранней стадии;
  • В полнотекстовом движке FTS3 в функции matchinfo() появился новый флаг сопоставления "b";
  • Добавлена программа fuzzcheck для качественного fuzz-тестирования БД. Программа автоматически вызывается при выполнении "make test";
  • Увеличена эффективность работы страничного кэша и реализовано предварительное выделение памяти для кэша. В тестах изменение позволило поднять производительность на 5% при типовых применения СУБД. Внесены разнообразные микрооптимизации, которые позволили выполнить на 22.3% больше работы в рамках тех же циклов CPU. В сумме, по производительности выпуск 3.8.11 в два раза быстрее 3.8.0 и в три раза быстрее 3.3.9 (при тестировании cachegrind и speedtest1.c в Ubuntu 14.04 x64 при сборке в gcc 4.8.2 с флагом -Os).

2012

SQLite 3.7.0

Изменения:

  • Для корректной работы в системах без ftruncate () размер БД сохраняется в заголовке.
  • Дерективы GROUP BY и ORDER BY не будут принимать значение (noop) при указании друг на друга.
  • Функция sqlite3_db_status (), код возврата SQLITE_DBSTATUS_CACHE_USED
  • Ускорена обработка запросов к базе данных, включена поддержка логирования.
  • Существенно сокрашено время на обработку запроса на построение индексов в базе данных благодаря использованию фонового построения.

SQLite 3.7.10

Осуществлен переход на использование по умолчанию 4 версии формата схемы данных, что подразумевает также включение по умолчанию более нового формата убывающих индексов и нарушение совместимости с БД SQLite версии ниже 3.3.0 (выпущенных до 2006 года).

Некоторые другие изменения:

  • Объявлена устаревшей структура sqlite3_pcache_methods, а также опции конфигурации SQLITE_CONFIG_PCACHE и SQLITE_CONFIG_GETPCACHE, вместо которых следует использовать sqlite3_pcache_methods2, SQLITE_CONFIG_PCACHE2 и SQLITE_CONFIG_GETPCACHE2;

  • В VFS-интерфейс добавлена поддержка режима защиты от потери данных в случае неожиданного отключения питания, который включается через опцию на этапе сборки SQLITE_POWERSAFE_OVERWRITE и через параметр "psow=BOOLEAN" в URI. Дополнительно исправлена недоработка, которая могла теоретически привести к повреждению базы при экстренном отключении питания;

  • Добавлены новые интерфейсы: sqlite3_db_release_memory(), sqlite3_db_filename(), sqlite3_stmt_busy(), sqlite3_uri_boolean() и sqlite3_uri_int64();

  • Возможность указания отрицательных значений в PRAGMA cache_size, которые будут указывать на необходимость уменьшения размера кэша на -1024*N байт относительно размера страницы памяти;

  • Улучшена используемая по умолчанию система распределения памяти;

  • Планировщик запросов улучшен в направлении задействования индексов при запросе диапазонов значений для rowid, обработке "UNION ALL" и в некоторых других ситуациях;

  • Улучшена реализация блокировок для "unix-dotfile" VFS (вместо open()/unlink() теперь используется mkdir()/rmdir());

  • Различные улучшения в реализации unix и windows VFS.

Языки программирования

Примечания



СМ. ТАКЖЕ (31)


Подрядчики-лидеры по количеству проектов

За всю историю
2021 год
2022 год
2023 год
Текущий год

Распределение вендоров по количеству проектов внедрений (систем, проектов) с учётом партнёров

За всю историю
2021 год
2022 год
2023 год
Текущий год

  Oracle (44, 179)
  SAP SE (6, 175)
  Microsoft (23, 142)
  PostgreSQL Global Development Group (14, 118)
  Постгрес профессиональный (ППГ, Postgres Professional) (6, 37)
  Другие (253, 201)

Распределение систем по количеству проектов, не включая партнерские решения

За всю историю
2021 год
2022 год
2023 год
Текущий год