> Что такое паттерн разделения на чтение и запись (Go)
Уровень: junior · Роль: backend · Язык: Go · Категория: Технические вопросы
Компании: Employcity
Стек: Go
> Пример ответа
Паттерн разделения на чтение и запись (CQRS - Command Query Responsibility Segregation) предполагает, что операции изменения данных (команды) и операции чтения данных (запросы) обслуживаются разными моделями или даже разными хранилищами. В Go это часто реализуется через отдельные интерфейсы и структуры.
Пример на Go:
GO// Модель для записи (команды)type CreateUserCommand struct {Name stringEmail string}type UserWriter interface {CreateUser(cmd CreateUserCommand) error}// Модель для чтения (запросы)type UserReadModel struct {ID stringName stringEmail string}type UserReader interface {GetUserByID(id string) (*UserReadModel, error)ListUsers() ([]UserReadModel, error)}// Реализацияtype userRepository struct {writeDB *sql.DBreadDB *sql.DB // может быть отдельная БД или кеш}func (r *userRepository) CreateUser(cmd CreateUserCommand) error {// запись в основную БД_, err := r.writeDB.Exec("INSERT INTO users ...", cmd.Name, cmd.Email)return err}func (r *userRepository) GetUserByID(id string) (*UserReadModel, error) {// чтение из реплики или кешаrow := r.readDB.QueryRow("SELECT id, name, email FROM users WHERE id = $1", id)// ...}
Преимущества: разделение ответственности, возможность оптимизировать модели под конкретные сценарии (например, денормализованные read-модели), независимое масштабирование. Недостатки: усложнение архитектуры, необходимость синхронизации данных (часто через события). В Go паттерн хорошо сочетается с event sourcing и конкурентными паттернами (каналы, горутины для асинхронной синхронизации).
> Похожие задачи по Go
Для чего лучше подходят синхронные и асинхронные репликации
Какие виды репликаций существуют
Почему нельзя заменить WITH (CTE) на подзапрос в SQL
Когда логирование хорошо использовать, а когда лучше не использовать
> Похожие задачи по backend
Для чего лучше подходят синхронные и асинхронные репликации
Какие виды репликаций существуют
Почему нельзя заменить WITH (CTE) на подзапрос в SQL
Когда логирование хорошо использовать, а когда лучше не использовать
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью