Назад к вопросам
Senior
10
/* Есть заказы, которые в процессе жизненного цикла переходят по статусам. Требуется реализовать слой работы с БД: - Сохранять историю статусов заказа - Учесть партицирование В дальнейшем, за рамками текущей задачи, будут реализованы другие методы: получение статусов по времени, полная история заказа и т.п. */
Компании, где спрашивали
plata
Ответ от нейросети
sobes.tech AI
Для реализации слоя работы с БД, который сохраняет историю статусов заказов с учетом партицирования, можно использовать следующую архитектуру:
-
Таблица
order_status_historyс колонками:order_id(идентификатор заказа)status(текущий статус)changed_at(время изменения)- другие метаданные (например, кто изменил)
-
Партицирование по времени (например, по месяцам) или по
order_id— зависит от объема и частоты запросов. -
В Go можно реализовать слой с методами:
SaveStatus(orderID string, status string, changedAt time.Time) error— для сохранения новой записи- В дальнейшем — методы для выборки истории по времени или по заказу.
Пример кода на Go с использованием database/sql:
import (
"database/sql"
"time"
)
type OrderStatusHistory struct {
DB *sql.DB
}
func (osh *OrderStatusHistory) SaveStatus(orderID string, status string, changedAt time.Time) error {
query := `INSERT INTO order_status_history (order_id, status, changed_at) VALUES (?, ?, ?)`
_, err := osh.DB.Exec(query, orderID, status, changedAt)
return err
}
Партицирование на уровне базы данных (например, в PostgreSQL) настраивается отдельно, чтобы оптимизировать хранение и запросы.