Пример ответа
Коротко: Я работал с 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 мс, и для управления сессиями в распределённых системах.
Практический совет (на неделю):
- Начните с PostgreSQL для большинства проектов на Go из-за его надёжности и богатой экосистемы, используя GORM для упрощения работы с ORM.
- Интегрируйте Redis для кэширования на ранних этапах, чтобы избежать проблем с масштабированием, особенно в API с высокой нагрузкой.
Golang Backend
Общий
23%
Следующий: Что такое индекс в БД
Предыдущий: Что такое итератор в Python