✅ Good
Бази даних¶
Бази даних — це пам'ять наших сервісів. Matrix зберігає повідомлення в PostgreSQL, Wiki — статті та пошуковий індекс, Gitea — метадані репозиторіїв.
Чому саме PostgreSQL?
PostgreSQL — це промисловий стандарт для серйозних проектів. Надійний, швидкий, з відкритим кодом. Майже всі наші сервіси використовують саме його.
Типи баз даних¶
flowchart LR
subgraph relational["Реляційні (SQL)"]
PG["PostgreSQL"]
SQLITE["SQLite"]
end
subgraph nosql["NoSQL"]
REDIS["Redis<br/>key-value"]
MONGO["MongoDB<br/>документи"]
end
subgraph usecase["Де використовуємо"]
U1["Matrix, Wiki, Gitea"]
U2["Мобільні, embedding"]
U3["Кеш, сесії"]
U4["Логи, metrics"]
end
PG --> U1
SQLITE --> U2
REDIS --> U3
MONGO --> U4
style relational fill:#dbeafe
style nosql fill:#fef3c7
style usecase fill:#d1fae5Матеріали розділу¶
| Стаття | Опис | Коли читати |
|---|---|---|
| Вступ | Концепції БД: таблиці, індекси, транзакції | Початківцям |
| PostgreSQL | Встановлення, налаштування, базові операції | Всім |
| Огляд СУБД | Порівняння PostgreSQL, MySQL, SQLite | Для вибору |
PostgreSQL в UMTC¶
Швидкий старт¶
# Запуск через Docker
docker run -d \
--name postgres \
-e POSTGRES_PASSWORD=secure_password \
-v pgdata:/var/lib/postgresql/data \
-p 5432:5432 \
postgres:16-alpine
Базові операції¶
-- Створення бази для нового сервісу
CREATE DATABASE synapse_db;
-- Створення користувача з обмеженими правами
CREATE USER synapse WITH PASSWORD 'strong_password';
GRANT ALL PRIVILEGES ON DATABASE synapse_db TO synapse;
-- Перевірка з'єднання
\conninfo
Безпека паролів
Ніколи не використовуйте паролі з прикладів у продакшені. Генеруйте криптостійкі паролі: `openssl rand -base64 32`
Бекапи¶
Бекап — це не опція, це обов'язок. Без бекапу втрата диска = втрата всіх даних.
# Бекап однієї бази
pg_dump -U postgres synapse_db > synapse_backup.sql
# Бекап всіх баз
pg_dumpall -U postgres > all_databases.sql
# Відновлення
psql -U postgres synapse_db < synapse_backup.sql
Автоматизація бекапів
Налаштуйте cron job для щоденних бекапів з ротацією старих копій. Зберігайте бекапи на окремому сервері.
Моніторинг¶
Ознаки проблем з БД:
- Повільні запити (>1 сек)
- Високе використання диска
- Багато відкритих з'єднань
-- Активні з'єднання
SELECT * FROM pg_stat_activity WHERE state = 'active';
-- Розмір баз
SELECT pg_database.datname, pg_size_pretty(pg_database_size(pg_database.datname))
FROM pg_database ORDER BY pg_database_size(pg_database.datname) DESC;
Пов'язані теми¶
Шлях: services/databases/index.md