«Маленькая. Быстрая. Надёжная. Выбери любые три». Так говорят про SQLite. На скриншоте — менеджер SQLiteStudio
«Маленькая. Быстрая. Надёжная. Выбери любые три». Так говорят про SQLite. На скриншоте — менеджер SQLiteStudio

Все мы любим SQLite. Это идеальный движок БД, быстрая компактная библиотека размером менее 1 МБ, автономная и практически неубиваемая. Это вообще удобный способ хранения информации, поскольку СУБД выигрывает у файловой системы по скорости доступа, сжатию, функциональности полнотекстового поиска и т. д. Например, она вдвое быстрее файловой системы Ext4 под Linux.

SQLite — самая популярная в мире СУБД. Как уже рассказывалось в статье «Безумные и забавные факты о SQLite», в мире активно используется более триллиона (!) БД SQLite, это невероятное число. Просто она встроена во все смартфоны, браузеры, операционные системы и бесчисленное число других приложений.

Как гласит официальный сайт, SQLite — это библиотека на языке C, которая реализует полнофункциональный SQL-движок базы данных.

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

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

Последняя версия библиотеки SQLite — 3.50.1, от 6 июня 2025 года.

Среди всех программных компонентов и библиотек SQLite входит в пятёрку самых популярных в мире, вместе с оригинальной реализацией zlib, оригинальным libpng и официальной библиотекой Libjpeg. На этих компонентах держится современная IT-индустрия: библиотеки для графики PNG и JPEG, сжатие данных zlib и наша СУБД SQLite.

Формат файлов

SQLite используется как формат файлов для самых разных приложений: системы контроля версий, инструменты финансового анализа, редакторы медиафайлов, CAD-пакеты, программы для ведения учёта и т. д. Традиционная команда «Открыть файл» в приложении просто вызывает sqlite3_open(). Обновления происходят автоматически по мере изменения содержимого приложения.

Как мы уже упоминали, SQLite в качестве формата файлов имеет множество преимуществ, это действительно серьёзная СУБД:

  • Небольшие изменения перезаписывают только те части файла, которые изменяются, что сокращает время записи и износ SSD.

  • Чтение и обновление контента лаконичными SQL-запросами.

  • Формат файла может быть расширен в будущих версиях просто добавлением новых таблиц и/или столбцов, с сохранением обратной совместимости.

  • Приложения могут использовать полнотекстовый поиск, индексы RTREE, а также триггеры для реализации автоматизированного стека undo/redo:

Вот полнотекстовый поиск:

create virtual table books_fts
using fts5(title, author, publisher);

insert into books_fts
select title, author, publisher from books;

select
  author,
  substr(title, 1, 30) as title,
  substr(publisher, 1, 10) as publisher
from books_fts
where books_fts match 'ann'
limit 5;
┌─────────────────────┬────────────────────────────────┬────────────┐
│       author        │             title              │ publisher  │
├─────────────────────┼────────────────────────────────┼────────────┤
│ Ruby Ann Boxcar     │ Ruby Ann's Down Home Trailer P │ Citadel    │
│ Ruby Ann Boxcar     │ Ruby Ann's Down Home Trailer P │ Citadel    │
│ Lynne Ann DeSpelder │ The Last Dance: Encountering D │ McGraw-Hil │
│ Daniel Defoe        │ Robinson Crusoe                │ Ann Arbor  │
│ Ann Thwaite         │ Waiting for the Party: The Lif │ David R. G │
└─────────────────────┴────────────────────────────────┴────────────┘
  • Файл приложения переносим между всеми операционными системами и архитектурами.

  • Несколько процессов подключаются к одному файлу, читают и пишут данные, не мешая друг другу.

  • Разнообразный контент из кучи файлов инкапсулируется в один файл для более простой передачи.

  • Содержимое обновляется непрерывно и атомарно, чтобы минимизировать потери при отключении питания или сбое.

  • SQL-запросы в несколько раз меньше эквивалентного процедурного кода, и поскольку количество ошибок на строку кода примерно постоянно, это означает меньшее количество ошибок в целом.

  • Содержимое БД SQLite можно просматривать с помощью множества сторонних инструментов.

  • Файлы БД SQLite рекомендуются Библиотекой Конгресса США для долгосрочного сохранения цифрового контента.

  • SQLite допускает любые кастомные расширения файлов, что тоже удобно.

Инструменты для работы с SQLite

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

Все знают про коммерческих бегемотов вроде MS Access, но интересно посмотреть на бесплатные опенсорсные программы такого рода.

SQLiteStudio

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

Кроссплатформенная программа, работает под Linux, Windows и MacOS, с открытым исходным кодом. Есть портативная версия, которая запускается без инсталляции.

Разработкой с 2007 года в одиночку занимается польский программист Павел Салава — в формате любительского пет-проекта.

SQLiteStudio 1.1.0 под Linux от 2008 года
SQLiteStudio 1.1.0 под Linux от 2008 года

Он говорит, что на момент создания это был первый в мире полноценный менеджер баз SQLite. В наше время появились и другие похожие программки, такие как DB Browser for SQLite (DB4S).

DB Browser for SQLite
DB Browser for SQLite

Но по сравнению с ними у SQLiteStudio гораздо больше функций, он проще в использовании и производительнее в операциях вроде импорта БД. Говорят, что летает даже на старых ПК.

Основные функции:

  • Продвинутый редактор SQL с подсветкой синтаксиса SQL и подсказками, форматированием кода, подчёркиванием ошибок. Например, можно кликнуть мышкой с нажатым Ctrl по названию таблицы в запросе — и она откроется (или индекс, или триггер).

  • Зашифрованные защищённые паролем БД, поддерживаются SQLCipher, WxSQLite3 и System.Data.SQLite:

  • SQL-запросы к нескольким БД.

  • Пользовательские SQL-функции, которые можно реализовать на JavaScript, Python или Tcl, есть репозиторий готовых скриптов.

  • Собственные последовательности сортировки (алгоритмы для сравнения значений).

  • История запросов.

  • Перетягивание мышкой таблиц и индексов между базами.

  • Автоматическое заполнение случайными значениями. Очень полезная функция: например, для презентации перед клиентом можно создать демонстрационную БД, заполнить её сгенерированными значениями и составить несколько SQL-запросов, чтобы показать, как будет работать реальная готовая система, которую вы намерены разработать.

  • Импорт из CSV или любого текстового файла, экспорт в SQL-запросы, CSV, HTML, XML, PDF, JSON.

  • Скрипты JavaScript, Python и Tcl в качестве генераторов для заполнения данных, пользовательских SQL-функций, последовательностей сортировки.

  • Плагины нескольких категорий: языки скриптов, форматы импорта/экспорта, форматы БД, подсветка кода, рендерер ячеек и др.

Тёмная тема
Тёмная тема

Изначально программа была реализована на Tcl/Tk, с третьей версии полностью переписана на C++/Qt.

Trilogy: альтернативный SQL

Trilogy (бывший PreQL) — это SQL-подобный язык, который позиционируется как семантический или более высокоуровневый слой для SQL.

Его можно напрямую использовать в качестве замены джойнам и group_by. Есть проверка типов, поддержка importв стиле Python для повторного использования и иерархических запросов. Синтаксис Trilogy компилируется в различные диалекты SQL (по умолчанию DuckDB).

Семантическими моделями можно делиться, комбинировать и итеративно дорабатывать в интерактивных сессиях, сохраняя кастомные рабочие процессы.

Более высокий уровень абстракции помогает более надёжно использовать SQL для LLM. Для нейронок спроектирован дополнительный пакет Trilogy NLP (pytrilogy-nlp).

Пока что Trilogy находится в стадии эксперимента, можно попробовать в онлайн-демо.

Например, вот фрагмент кода PRQL:

# model logic is written first

# with a pure semantic model
const greeting <- 'Hello'; # comments describe fields
key noun string; # people, places, things

# that you bind to data
datasource things (
  thing:noun
)
grain (noun)
query '''
select unnest(['world', 'friend', 'visitor']) as thing
''';

# with reusable functions
def initcap(word)-> upper(substring(word, 1, 1)) || substring(word,2, len(word));

# and run queries in familiar SQL syntax
WHERE noun like '%world%' or noun = 'friend'
SELECT
  greeting || ' ' || @initcap(noun) || '!' as salutation,
  rank salutation by len(salutation) asc as brevity_rank
;

Результат выполнения:

salutation

brevity_rank

Hello World!

1

Hello Friend!

2

Соответствующий код SQL, который генерируется в процессе:

WITH 
highfalutin as (
SELECT
    things."thing" as "noun"
FROM
    (
select unnest(['world', 'friend', 'visitor']) as thing
) as things
WHERE
     CASE WHEN things."thing" like '%world%' THEN True ELSE False END or things."thing" = 'friend'
),
wakeful as (
SELECT
    (((:greeting || ' ') || (UPPER(SUBSTRING(highfalutin."noun",1,1))  || SUBSTRING(highfalutin."noun",2,length(highfalutin."noun")))) || '!') as "salutation"
FROM
    highfalutin
WHERE
     CASE WHEN highfalutin."noun" like '%world%' THEN True ELSE False END or highfalutin."noun" = 'friend'
)
SELECT
    wakeful."salutation" as "salutation",
    rank() over (order by length(wakeful."salutation") asc ) as "brevity_rank"
FROM
    wakeful

SQLite-utils

SQLite-utils — утилита командной строки и питоновская библиотека для работы с базами данных SQLite.

Она не позиционируется как многофункциональный инструмент, а предназначена для максимально быстрого выполнения двух простых функций:

  • создание БД из командной строки;

  • заполнение её значениями.

Библиотека спроектирована как полезное дополнение к Datasette

Вот пример по импорту базы в SQLite-utils, очистке данных и дальнейшему просмотру в Datasette:

SQLite Page Explorer

SQLite Page Explorer — маленькое GUI-приложение со встроенным сервером redbean для просмотра баз SQLite «постранично», как их видит сам движок:

SQLite Page Explorer
SQLite Page Explorer

SQLite, как большинство СУБД, хранит данные в страницах размером с блок на диске, это нааименьшая единица хранения данных в файловой системе, обычно 4 КБ. Минимальный размер страниц максимально ускоряет чтение и запись.

Обычно разработчики взаимодействуют с базой данных на уровне её схемы или структуры — то есть таблиц, строк и SQL. Но представление на уровне страницы даёт интересные инсайты:

  • Как индексы на самом деле выглядят на диске (это по сути отдельные маленькие таблицы).

  • Как более компактно хранить данные (и таким образом ускорить запросы и повысить производительность приложения).

  • Некоторые проблемы и неэффективности не заметны в схеме, а здесь их видно.

  • Представление о B-деревьях, одной из самых важных структур данных в вычислениях. Это основа большинства файловых систем и баз данных.

Благодаря магии redbean исполняемый файл sqlite-page-explorer.com размером 6,5 МБ запускается и работает нативно на Windows, Linux, MacOS и различных BSD, на любых архитектурах: ARM64 и x64:


Из других менеджеров можно упомянуть DbVisualizer, DbGate и DBeaver — универсальный менеджер для всех популярных БД SQL, таких как MySQL, MariaDB, PostgreSQL, SQLite, Apache Family и др.

DBeaver
DBeaver

Конечно, работать с базой можно из консоли:

LiteCLI
LiteCLI

Но графический интерфейс помогает быстрее понять и визуально оценить структуру БД. Бывает, что он просто незаменим, например, для визуализации RTL-текста, если тот присутствует в некоторых колонках. Такой текст (арабский, иврит и проч.) плохо поддерживается в консольных редакторах.

Кроме того, в графическом интерфейсе даже начинающие пользователи могут отлично работать с СУБД, почти как с электронными таблицами типа Excel.

© 2025 ООО «МТ ФИНАНС»

Комментарии (3)


  1. sintech
    09.08.2025 09:22

    HeidiSQL тоже неплохо работает с SQLite.


  1. bear11
    09.08.2025 09:22

    Последняя на 9 августа все-таки
    Latest Release
    Version 3.50.4 (2025-07-30)


  1. LeshaRB
    09.08.2025 09:22

    Я лет 15 +- встретил программку SQLite Expert так на ней остался, она и обновляется. Ну и про можно найти )