Ответ
В Go очистка устаревших данных обычно реализуется через:
- Периодические джобы (cron-задачи):
func cleanupOldData(db *sql.DB, olderThan time.Duration) {
_, err := db.Exec(
"DELETE FROM records WHERE created_at < ?",
time.Now().Add(-olderThan),
)
if err != nil {
log.Printf("Cleanup failed: %v", err)
}
}
// Запуск раз в день
go func() {
for range time.Tick(24 * time.Hour) {
cleanupOldData(db, 30*24*time.Hour) // 30 дней
}
}()
- TTL индексы в MongoDB:
// Создание индекса с TTL
indexModel := mongo.IndexModel{
Keys: bson.D{{"createdAt", 1}},
Options: options.Index().SetExpireAfterSeconds(3600), // 1 час
}
Ключевые моменты:
- Очистку лучше делать в непиковые часы
- Для больших таблиц - batch-обработка (LIMIT + паузы)
- Транзакционность для критичных данных
- Мониторинг нагрузки на БД