Какие системы управления базами данных использовались на проекте?

Ответ

Проект использовал PostgreSQL как основную реляционную СУБД и MongoDB для отдельных сервисов, требующих гибкой схемы данных.

PostgreSQL:

  • Причина выбора: Надежность, строгая ACID-совместимость, поддержка сложных запросов (оконные функции, CTE), JSONB-тип.
  • Пример подключения и запроса (Python, psycopg2):
    
    import psycopg2
    from psycopg2 import sql

conn = psycopg2.connect( host="localhost", database="app_db", user="app_user", password=os.getenv('DB_PASSWORD') ) cur = conn.cursor()

Использование параметризованного запроса для безопасности

cur.execute("SELECT id, name FROM users WHERE active = %s;", (True,)) users = cur.fetchall() conn.close()



**MongoDB:**
*   **Причина выбора:** Документно-ориентированная модель, быстрая разработка при изменяющихся требованиях, горизонтальная масштабируемость.
*   **Использование:** Применялась в микросервисах для хранения логов, пользовательских профилей и контента в формате JSON-документов.

Ответ 18+ 🔞

Да ты посмотри, какая у нас тут архитектурная карусель завертелась! Взяли, понимаешь, две базы данных и давай их по проекту раскидывать, как будто карты на столе раскладываем. Ну, а хули — каждая задача своё болтик требует.

PostgreSQL, мать его, — это наш фундамент, крепкий такой, не шатаемый. Выбрали его не просто так, а потому что он, сука, как швейцарские часы: ACID-совместимость у него строже, чем у монастырского устава, запросы любые, даже самые заковыристые, вывозит — с этими его оконными функциями и CTE. А ещё JSONB впихнули, чтоб совсем жизнь мёдом не казалась — можно и структурированно, и полуструктурированно, если приспичит. Короче, надёжный бугай.

Вот, смотри, как с ним общаемся на Python, через psycopg2:

import psycopg2
from psycopg2 import sql

conn = psycopg2.connect(
    host="localhost",
    database="app_db",
    user="app_user",
    password=os.getenv('DB_PASSWORD')
)
cur = conn.cursor()
# Использование параметризованного запроса для безопасности
cur.execute("SELECT id, name FROM users WHERE active = %s;", (True,))
users = cur.fetchall()
conn.close()

Видишь? Всё чинно, благородно, параметризованные запросы, чтобы никаких SQL-инъекций, этих, блядь, незваных гостей.

А теперь, внимание, второй акт нашего цирка — MongoDB! Это уже не фундамент, а такой гибкий, пластилиновый червячок. Выбрали его, когда нужно было сервисы пилить быстро, а требования менялись чаще, чем перчатки у оперной дивы. Документная модель, масштабируется горизонтально — красота же!

Использовали мы эту мартышку в микросервисах, которым похуй на строгую схему. Логи туда пихали, пользовательские профили, которые у каждого клиента как снежинки — все разные, и всякий контент в JSON-документах. Гибко, блядь! Один сервис захотел поле новое — и хуй с ним, добавил и всё, не нужно миграции на всю базу городить.

Вот так и живём: где нужна строгость и транзакции — там Постгрес, наш суровый отец. А где скорость разработки и схема, которая как дышло — туда Монгу засовываем. Главное — не перепутать, а то будет пиздец, а не архитектура.