Универсальный клиент баз данных DbGate для веба и десктопа
Обычно стек современного бэкенда не ограничивается одной СУБД. В проекте запросто могут уживаться PostgreSQL под основную реляционную модель, Redis для кэша и сессий, ClickHouse для аналитических логов и MongoDB под неструктурированные документы. В такой ситуации открывать четыре разных тяжелых клиента или держать открытыми несколько вкладок DBeaver — сомнительное удовольствие.
Недавно я наткнулся на DbGate. Это проект под лицензией GPL-3.0, который пытается решить проблему зоопарка баз данных единым подходом. Самое интересное здесь то, что клиент одинаково хорошо работает как настольное приложение на Electron и как легковесный веб-интерфейс в Docker-контейнере.
Что умеет проект
DbGate поддерживает работу с SQL и NoSQL источниками данных. В списке совместимости есть Postgres, MySQL, SQLite, SQL Server, Oracle, MariaDB, ClickHouse, DuckDB, CockroachDB, Firebird, Cassandra, MongoDB и Redis.
Инструмент берет на себя рутину администрирования данных и предлагает несколько нетипичных фич:
- Навигация по связям через Foreign Keys. В табличном представлении можно прямо из строки развернуть дочерние записи из связанной таблицы (Master/Detail) или подтянуть колонки по внешнему ключу без ручного написания JOIN.
- Просмотр и редактирование данных с генерацией скрипта изменений. Вы кликаете по ячейкам, правите значения, а перед отправкой в базу можете посмотреть сгенерированный SQL-патч.
- Визуальный конструктор запросов. Помогает набросать структуру запроса мышкой, если лень писать длинные выражения руками, включая выборки с
WHERE NOT EXISTS. - Встроенный просмотрщик файлов NDJSON, JSON, CSV и Excel. Причем большие NDJSON файлы можно открывать и редактировать напрямую на диске без предварительного импорта.
- ER-диаграммы и сравнение схем с генерацией миграций синхронизации.
- Визуализация данных на картах для GEO-колонок и построение простых графиков с экспортом в HTML.
Как устроена архитектура
Под капотом у проекта весьма практичный стек:
- Фронтенд написан на Svelte. Интерфейс откликается быстро, не перегружен лишними DOM-узлами и шустро рендерит большие виртуализированные таблицы.
- Серверная часть работает на Node.js и Express, используя стандартные коннекторы к базам данных.
- Десктопная сборка заворачивает всё это в Electron для Windows, Linux и macOS.
Интересна модульность. Многие утилиты вынесены в отдельные NPM-пакеты. Например, если вам нужен пайплайн для экспорта данных в CSV по расписанию, скрипты на Node.js можно запускать автономно на сервере без графического интерфейса.
Вдобавок реализована плагинная система. Написав небольшой модуль на TypeScript или JavaScript, можно подключить кастомный драйвер или добавить парсер редкого формата файлов.
Быстрый запуск
Если хочется пощупать клиент без установки на машину, проще всего поднять веб-версию в Docker:
docker run -it --name dbgate-instance --restart always -p 3000:3000 dbgate/dbgate
После этого открываем http://localhost:3000 в браузере и подключаемся к локальным или удаленным базам.
Для тех, кто хочет собрать проект локально и поковыряться в исходниках:
git clone https://github.com/dbgate/dbgate.git
cd dbgate
yarn
yarn start
Команда запустит бэкенд на порту 3000 и веб-интерфейс на порту 5001.
Сценарии использования
На практике DbGate отлично закрывает две задачи:
- Персональный инструмент разработчика. Заменяет связку из DBeaver, RedisInsight и MongoDB Compass, не пожирая гигабайты оперативной памяти на старте.
- Внутренняя панель для команды на сервере. Подняв Docker-образ внутри закрытого контура, вы даете аналитикам и разработчикам доступ к базам через единый веб-интерфейс без необходимости каждому настраивать SSH-туннели и локальные утилиты.
Кому подойдет
Если вам надоел медленный запуск тяжелых Java-клиентов или вы устали переключаться между отдельными программами для Redis и PostgreSQL, на DbGate определенно стоит взглянуть. Проект активно развивается, распространяется под свободной лицензией и доступен как в десктопном, так и в серверном варианте.
