- PVSM.RU - https://www.pvsm.ru -
Все мы любим SQLite [1]. Это идеальный движок БД, быстрая [2] компактная библиотека размером менее 1 МБ [3], автономная [4] и практически неубиваемая [5]. Это вообще удобный способ хранения информации [6], поскольку СУБД выигрывает у файловой системы по скорости доступа, сжатию [7], функциональности полнотекстового поиска и т. д. Например, она вдвое быстрее [8] файловой системы Ext4 под Linux.
SQLite — самая популярная в мире СУБД [9]. Как уже рассказывалось в статье «Безумные и забавные факты о SQLite» [10], в мире активно используется более триллиона (!) БД SQLite, это невероятное число. Просто она встроена во все смартфоны, браузеры, операционные системы и бесчисленное число других приложений.
Как гласит официальный сайт [11], SQLite — это библиотека на языке C, которая реализует полнофункциональный [12] SQL-движок базы данных.
Формат файлов SQLite [13] стабилен, кроссплатформен и обратно совместим, и разработчики обязуются поддерживать его до 2050 года [14]. Файлы БД SQLite часто используются в качестве контейнеров для передачи [6] контента [7] между системами [15] и в качестве архивного формата для долгосрочного хранения [16].
Исходный код SQLite [17] находится в общественном достоянии вообще без лицензии и доступен всем для использования в любых целях. Забавно, что проект поддерживают всего три человека [18], которые не допускают внешних контрибьюторов. В данный момент имена авторов держатся в секрете и удалены с официального сайта во избежание сталкинга.
Последняя версия библиотеки SQLite — 3.50.1 [19], от 6 июня 2025 года.
Среди всех программных компонентов и библиотек SQLite входит в пятёрку самых популярных в мире, вместе с оригинальной реализацией zlib [20], оригинальным libpng [21] и официальной библиотекой Libjpeg [22]. На этих компонентах держится современная IT-индустрия: библиотеки для графики PNG и JPEG, сжатие данных zlib и наша СУБД SQLite.
SQLite используется как формат файлов для самых разных приложений [15]: системы контроля версий, инструменты финансового анализа, редакторы медиафайлов, CAD-пакеты, программы для ведения учёта и т. д. Традиционная команда «Открыть файл» в приложении просто вызывает sqlite3_open(). Обновления происходят автоматически по мере изменения содержимого приложения.
Как мы уже упоминали, SQLite в качестве формата файлов имеет множество преимуществ [6], это действительно серьёзная СУБД [23]:
Чтение и запись из базы данных SQLite зачастую быстрее, чем из файловой системы [2].
Приложение загружает только нужные данные, а не читает весь файл и держит его в памяти. Например, можно разместить БД SQLite на GitHub Pages или любом статичном — и запрашивать с клиента только нужную информацию [25]:

Небольшие изменения перезаписывают только те части файла, которые изменяются, что сокращает время записи и износ SSD.
Чтение и обновление контента лаконичными SQL-запросами.
Формат файла может быть расширен в будущих версиях просто добавлением новых таблиц и/или столбцов, с сохранением обратной совместимости.
Приложения могут использовать полнотекстовый поиск [26], индексы RTREE [27], а также триггеры для реализации автоматизированного стека undo/redo [28]:
Вот полнотекстовый поиск:
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 рекомендуются Библиотекой Конгресса США [29] для долгосрочного сохранения цифрового контента.
SQLite допускает любые кастомные расширения файлов, что тоже удобно.
Если файлы SQLite настолько удобны для хранения и редактирования информации, то возникает мысль: какие инструменты лучше всего подходят для работы с этими файлами?
Все знают про коммерческих бегемотов вроде MS Access [30], но интересно посмотреть на бесплатные опенсорсные программы такого рода.
SQLiteStudio [31] — удобная программа для создания, редактирования и просмотра баз данных SQLite.

Кроссплатформенная программа, работает под Linux, Windows и MacOS, с открытым исходным кодом [32]. Есть портативная версия, которая запускается без инсталляции.
Разработкой с 2007 года в одиночку занимается польский программист Павел Салава — в формате любительского пет-проекта.
Он говорит, что на момент создания это был первый в мире полноценный менеджер баз SQLite. В наше время появились и другие похожие программки, такие как DB Browser for SQLite [33] (DB4S).
Но по сравнению с ними у SQLiteStudio гораздо больше функций, он проще в использовании и производительнее в операциях вроде импорта БД. Говорят, что летает даже на старых ПК.
Основные функции:
Продвинутый редактор SQL с подсветкой синтаксиса SQL и подсказками, форматированием кода, подчёркиванием ошибок. Например, можно кликнуть мышкой с нажатым Ctrl по названию таблицы в запросе — и она откроется (или индекс, или триггер).
Зашифрованные защищённые паролем БД, поддерживаются SQLCipher [34], WxSQLite3 [35] и System.Data.SQLite [36]:

SQL-запросы к нескольким БД.
Пользовательские SQL-функции, которые можно реализовать на JavaScript, Python или Tcl, есть репозиторий готовых скриптов [37].
Собственные последовательности сортировки (алгоритмы для сравнения значений).
История запросов.
Перетягивание мышкой таблиц и индексов между базами.
Автоматическое заполнение случайными значениями. Очень полезная функция: например, для презентации перед клиентом можно создать демонстрационную БД, заполнить её сгенерированными значениями и составить несколько SQL-запросов, чтобы показать, как будет работать реальная готовая система, которую вы намерены разработать.
Импорт из CSV или любого текстового файла, экспорт в SQL-запросы, CSV, HTML, XML, PDF, JSON.
Скрипты JavaScript, Python и Tcl в качестве генераторов для заполнения данных, пользовательских SQL-функций, последовательностей сортировки.
Плагины нескольких категорий: языки скриптов, форматы импорта/экспорта, форматы БД, подсветка кода, рендерер ячеек и др.
Изначально программа была реализована на Tcl/Tk [38], с третьей версии полностью переписана на C++/Qt [39].
Trilogy [40] (бывший PreQL) — это SQL-подобный язык, который позиционируется как семантический или более высокоуровневый слой для SQL.
Его можно напрямую использовать в качестве замены джойнам и group_by. Есть проверка типов, поддержка importв стиле Python для повторного использования и иерархических запросов. Синтаксис Trilogy компилируется в различные диалекты SQL (по умолчанию DuckDB).
Семантическими моделями можно делиться, комбинировать и итеративно дорабатывать в интерактивных сессиях, сохраняя кастомные рабочие процессы.
Более высокий уровень абстракции помогает более надёжно использовать SQL для LLM. Для нейронок спроектирован дополнительный пакет Trilogy NLP [41] (pytrilogy-nlp).
Пока что Trilogy находится в стадии эксперимента, можно попробовать в онлайн-демо [42].
Например, вот фрагмент кода 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 [43] — утилита командной строки и питоновская библиотека для работы с базами данных SQLite.
Она не позиционируется как многофункциональный инструмент, а предназначена для максимально быстрого выполнения двух простых функций:
создание БД из командной строки;
заполнение её значениями.
Библиотека спроектирована как полезное дополнение к Datasette [44]
Вот пример [45] по импорту базы в SQLite-utils, очистке данных и дальнейшему просмотру в Datasette:
SQLite Page Explorer [46] — маленькое GUI-приложение со встроенным сервером redbean [47] для просмотра баз SQLite «постранично», как их видит сам движок:
SQLite, как большинство СУБД, хранит данные в страницах размером с блок на диске, это нааименьшая единица хранения данных в файловой системе, обычно 4 КБ. Минимальный размер страниц максимально ускоряет чтение и запись.
Обычно разработчики взаимодействуют с базой данных на уровне её схемы или структуры — то есть таблиц, строк и SQL. Но представление на уровне страницы даёт интересные инсайты:
Как индексы на самом деле выглядят на диске (это по сути отдельные маленькие таблицы).
Как более компактно хранить данные (и таким образом ускорить запросы и повысить производительность приложения).
Некоторые проблемы и неэффективности не заметны в схеме, а здесь их видно.
Представление о B-деревьях, одной из самых важных структур данных в вычислениях. Это основа большинства файловых систем и баз данных.
Благодаря магии redbean исполняемый файл sqlite-page-explorer.com размером 6,5 МБ запускается и работает нативно на Windows, Linux, MacOS и различных BSD, на любых архитектурах: ARM64 и x64:

Из других менеджеров можно упомянуть DbVisualizer [48], DbGate [49] и DBeaver [50] — универсальный менеджер для всех популярных БД SQL, таких как MySQL, MariaDB, PostgreSQL, SQLite, Apache Family и др.
Конечно, работать с базой можно из консоли:
Но графический интерфейс помогает быстрее понять и визуально оценить структуру БД. Бывает, что он просто незаменим, например, для визуализации RTL-текста, если тот присутствует в некоторых колонках. Такой текст (арабский, иврит и проч.) плохо поддерживается в консольных редакторах.
Кроме того, в графическом интерфейсе даже начинающие пользователи могут отлично работать с СУБД, почти как с электронными таблицами типа Excel.
© 2025 ООО «МТ ФИНАНС»
Автор: ru_vds
Источник [51]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/sqlite/427597
Ссылки в тексте:
[1] SQLite: https://www.sqlite.org/
[2] быстрая: https://www.sqlite.org/fasterthanfs.html
[3] менее 1 МБ: https://www.sqlite.org/footprint.html
[4] автономная: https://www.sqlite.org/selfcontained.html
[5] неубиваемая: https://www.sqlite.org/hirely.html
[6] удобный способ хранения информации: https://www.sqlite.org/aff_short.html
[7] сжатию: https://www.sqlite.org/sqlar.html
[8] вдвое быстрее: https://github.com/chrisdavies/dbench
[9] самая популярная в мире СУБД: https://www.sqlite.org/mostdeployed.html
[10] «Безумные и забавные факты о SQLite»: https://habr.com/ru/companies/ruvds/articles/873816/
[11] официальный сайт: https://www.sqlite.org/index.html
[12] полнофункциональный: https://www.sqlite.org/fullsql.html
[13] Формат файлов SQLite: https://www.sqlite.org/fileformat2.html
[14] до 2050 года: https://www.sqlite.org/lts.html
[15] между системами: https://www.sqlite.org/appfileformat.html
[16] архивного формата для долгосрочного хранения: https://www.sqlite.org/locrsf.html
[17] Исходный код SQLite: https://sqlite.org/src
[18] три человека: https://www.sqlite.org/crew.html
[19] 3.50.1: https://www.sqlite.org/releaselog/3_50_1.html
[20] zlib: http://zlib.net/
[21] libpng: http://www.libpng.org/
[22] Libjpeg: https://github.com/winlibs/libjpeg
[23] серьёзная СУБД: https://antonz.org/sqlite-is-not-a-toy-database/
[24] хостинге: https://www.reg.ru/?rlink=reflink-717
[25] запрашивать с клиента только нужную информацию: https://phiresky.github.io/blog/2021/hosting-sqlite-databases-on-github-pages/
[26] полнотекстовый поиск: https://www.sqlite.org/fts3.html
[27] RTREE: https://www.sqlite.org/rtree.html
[28] автоматизированного стека undo/redo: https://www.sqlite.org/undoredo.html
[29] рекомендуются Библиотекой Конгресса США: https://www.loc.gov/preservation/resources/rfs/
[30] MS Access: https://www.microsoft.com/ru-RU/microsoft-365/access
[31] SQLiteStudio: https://sqlitestudio.pl/
[32] открытым исходным кодом: https://github.com/pawelsalawa/sqlitestudio/
[33] DB Browser for SQLite: https://sqlitebrowser.org/
[34] SQLCipher: https://www.zetetic.net/sqlcipher/
[35] WxSQLite3: https://github.com/utelle/wxsqlite3
[36] System.Data.SQLite: https://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki
[37] репозиторий готовых скриптов: https://github.com/pawelsalawa/sqlitestudio/wiki/Scripts_repository
[38] Tcl/Tk: https://www.tcl.tk/
[39] Qt: https://qt.io/
[40] Trilogy: https://trilogydata.dev/
[41] Trilogy NLP: https://trilogydata.dev/nlp/#reliable-sql-for-humans-and-machines
[42] онлайн-демо: https://trilogydata.dev/demo/
[43] SQLite-utils: https://sqlite-utils.datasette.io/en/stable/
[44] Datasette: https://datasette.io/
[45] пример: https://datasette.io/tutorials/clean-data
[46] SQLite Page Explorer: https://github.com/QuadrupleA/sqlite-page-explorer
[47] redbean: https://redbean.dev/
[48] DbVisualizer: https://www.dbvis.com/
[49] DbGate: https://dbgate.org/
[50] DBeaver: https://dbeaver.io/
[51] Источник: https://habr.com/ru/companies/ruvds/articles/924338/?utm_campaign=924338&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.