Встраиваемая система управления базами данных
— архитектура
систем управления базами данных
, когда СУБД тесно связана с прикладной программой и работает на том же компьютере, не требуя профессионального
администрирования
.
Встраиваемые СУБД применяются во многих программах, которые хранят большие массивы данных, но при этом не требуется доступ с многих компьютеров. На «рабочем столе» неопытного пользователя тоже есть программы, в которых может найтись встраиваемая СУБД:
почтовые клиенты
и
мессенджеры
(базы переписки)
,
медиапроигрыватели
(
плей-листы
и обложки)
,
просмотрщики изображений
(
метаданные
и уменьшенные эскизы)
, различные локальные БД наподобие телефонных справочников и
геоинформационных систем
(предоставляемые данные).
Исторически локальные и файл-серверные СУБД предоставляли
скриптовый язык
, на котором пользователь мог писать прикладную программу. Так устроены, например,
Microsoft Access
,
FoxPro
,
Clipper
,
1С: Бухгалтерия
. Недостатком этого подхода были крайняя бедность результирующих программ и ограниченные средства отладки. Также зачастую не существовало компактной среды исполнения, которую можно распространять вместе с программой; если пользователю была нужна программа, ему нужно было устанавливать весь пакет. С распространением
динамически подключаемых библиотек
и
Open Source
-сообщества обстоятельства изменились: теперь программист может писать свою программу на том
языке высокого уровня
, на котором ему удобно, а СУБД же будет подсоединена к программе и станет единым целым с ней.
Особенности
Нет отдельной программы-сервера
Физически встраиваемая СУБД является
библиотекой
, статически или динамически подсоединённой к основной программе. Программа и СУБД общаются не через
сетевые сокеты
, а через специализированный
API
. В этом, правда, есть и недостаток: зачастую программист сам должен не допускать
многопоточных гонок
.
Высокая скорость и малый расход памяти, особенно на длинных
строках
и
BLOBах
Благодаря специализированному API количество операций чтения-записи минимально.
Зачастую небольшой по меркам БД максимальный размер базы
От единиц гигабайт (объём памяти ПК на 2012 год) до единиц терабайт (порядка объёма жёсткого диска). Например,
SQLite
всегда держит в памяти оглавление БД (аналог
), этим ограничивается объём БД
.
Как правило, специализированный язык запросов или неполная совместимость с
SQL-92
В угоду производительности часто разработчики реализуют или неполный SQL (
SQLite
),
или специализированный язык запросов (
BerkeleyDB
). К тому же встраиваемые СУБД могут действовать совсем по другому принципу, чем клиент-серверные:
пинг
к БД нулевой, и запрос можно выполнять по частям, несколькими обращениями к СУБД.
Большего однопользовательской БД и не нужно. Как правило, транзакции изолируются по принципу «
записываем по одному
» с помощью стандартных механизмов ОС наподобие
блокировки файлов
. Доступ к одному файлу из нескольких программ наладить можно: так,
SQLite
успешно работает в малонагруженных сайтах
. Но высокая нагрузка ему не по зубам.
Встраиваемая БД надёжна настолько, насколько надёжна библиотека СУБД и
файловая система
, на которой база данных располагается. Известные встраиваемые СУБД, как правило, хорошо
оттестированы
,
а современные файловые системы очень надёжны. Тем не менее, есть множество способов потерять данные,
так что такие решения по надёжности уступают серверным СУБД.
Как правило, нет языковых средств, упрощающих доступ к БД
Специализированные СУБД-языки наподобие
xBase
обычно представляют собой симбиоз языка запросов и языка прикладного программирования. В языках программирования общего назначения правильность запроса будет проверена не при компиляции, а лишь тогда, когда запрос будет послан в СУБД. И, конечно же, на языке программирования общего назначения конструкции доступа к БД (как встраиваемой, так и клиент-серверной) будут тяжеловесными.
Впрочем, в
C#
есть язык запросов
LINQ
, который компилируется в комбинацию вызовов методов, а те, как правило, готовят обычный
SQL
.