Sobes.tech
Senior
39

Тапсырыстар өмірлік циклі кезінде статустар арқылы өтетін. Дерекқор қабатын жүзеге асырыңыз: - Тапсырыс статусының тарихын сақтау - Партицирлеуді ескеру Келешекте, ағымдағы тапсырмадан тыс, басқа әдістер жүзеге асырылады: уақыт бойынша статустарды алу, толық тапсырыс тарихы және т.б.

Сұралған компаниялар
plata

AI-дан жауап

sobes.tech AI

Для реализации слоя работы с БД, который сохраняет историю статусов заказов и учитывает партицирование, можно использовать следующую архитектуру:

  1. Таблица истории статусов — хранит записи с полями: order_id, status, changed_at (время изменения), возможно changed_by (кто изменил), и другие метаданные.

  2. Партицирование — для масштабируемости и быстрого доступа к данным можно партицировать таблицу по времени (например, по месяцам) или по диапазону order_id, в зависимости от нагрузки и объема данных.

  3. Пример структуры таблицы (PostgreSQL):

CREATE TABLE order_status_history (
    order_id UUID NOT NULL,
    status VARCHAR(50) NOT NULL,
    changed_at TIMESTAMP NOT NULL,
    changed_by UUID,
    PRIMARY KEY (order_id, changed_at)
) PARTITION BY RANGE (changed_at);

CREATE TABLE order_status_history_2024_01 PARTITION OF order_status_history
    FOR VALUES FROM ('2024-01-01') TO ('2024-02-01');
  1. В Go можно реализовать слой с методами для добавления записи в историю и выборки по разным параметрам. Для записи статуса:
func SaveOrderStatus(ctx context.Context, db *sql.DB, orderID string, status string, changedBy string) error {
    query := `INSERT INTO order_status_history (order_id, status, changed_at, changed_by) VALUES ($1, $2, NOW(), $3)`
    _, err := db.ExecContext(ctx, query, orderID, status, changedBy)
    return err
}
  1. Дальнейшие методы (получение статусов по времени, полная история) можно реализовать с использованием фильтров по changed_at и order_id.

Такой подход позволит эффективно хранить и масштабировать историю статусов заказов с возможностью гибкого запроса данных.