С какими БД работал · Golang Backend — JobPilot

С какими БД работал

Golang Backend · 23%
Вопрос 2921 / #
Пример ответа

Коротко: Я работал с PostgreSQL, MySQL и Redis в качестве основных баз данных для бэкенд-приложений на Go, используя их для хранения структурированных данных, кэширования и сессий.

  • PostgreSQL
  • MySQL
  • Redis
  • SQLite
  • MongoDB
Ключевые идеи:
  • PostgreSQL и MySQL использовал для хранения структурированных данных с ORM (GORM) и нативными драйверами, обеспечивая ACID-транзакции и миграции.
  • Redis применял для кэширования частых запросов, управления сессиями и реализации очередей задач, что повышало производительность приложений.
  • MongoDB и SQLite использовал в нишевых сценариях, таких как прототипирование или хранение документов, где гибкость схемы была преимуществом.
Пример: В проекте микросервиса на Go я использовал PostgreSQL для основного хранилища пользовательских данных с GORM, Redis для кэширования результатов API-запросов и снижения нагрузки на базу, а MongoDB для логов и аналитики из-за её схемонезависимости.
Пример подключения к PostgreSQL с использованием GORM и выполнения простого запроса в Go
go
package main

import (
    "gorm.io/driver/postgres"
    "gorm.io/gorm"
    "log"
)

type User struct {
    ID    uint   `gorm:"primaryKey"`
    Name  string
    Email string `gorm:"uniqueIndex"`
}

func main() {
    dsn := "host=localhost user=postgres password=secret dbname=mydb port=5432 sslmode=disable"
    db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
    if err != nil {
        log.Fatal("Failed to connect to database:", err)
    }
    
    // Автомиграция
    db.AutoMigrate(&User{})
    
    // Создание записи
    user := User{Name: "Alice", Email: "alice@example.com"}
    result := db.Create(&user)
    if result.Error != nil {
        log.Fatal("Failed to create user:", result.Error)
    }
    
    // Чтение записи
    var fetchedUser User
    db.First(&fetchedUser, "email = ?", "alice@example.com")
    log.Printf("Fetched user: %+v", fetchedUser)
}
Вопросы для интервьюера:
  • Как вы выбирали между PostgreSQL и MySQL для конкретного проекта?Я выбирал PostgreSQL для проектов, требующих расширенных функций, таких как JSONB или полнотекстовый поиск, и MySQL для простых веб-приложений с высокой скоростью чтения.
  • Какие проблемы с производительностью вы решали с помощью Redis?Я использовал Redis для кэширования результатов тяжёлых SQL-запросов, что снижало время ответа API с 500 мс до 50 мс, и для управления сессиями в распределённых системах.
Практический совет (на неделю):
  1. Начните с PostgreSQL для большинства проектов на Go из-за его надёжности и богатой экосистемы, используя GORM для упрощения работы с ORM.
  2. Интегрируйте Redis для кэширования на ранних этапах, чтобы избежать проблем с масштабированием, особенно в API с высокой нагрузкой.
Golang Backend
Общий
23%
Навигация
Что такое итератор в Python
Следующий: Что такое индекс в БД
Предыдущий: Что такое итератор в Python

Мы используем cookie для улучшения сайта. Продолжая пользоваться сайтом, вы соглашаетесь с политикой cookie и политикой конфиденциальности.