Обработка длинных задач по созданию обновлений в django
У меня есть задача по созданию маршрутов. Маршрут может быть объектом с origin, destination, type. Origin и Destination - это просто FK из Location ojbect.
Представьте, что у меня есть 3 локации, a, b, c. с тремя типами, X, Y, Z. Тогда возможные маршруты таковы.
routes = [(a,b,x), (a,c,x), (b,a,x), (b,c,x), (c,a,x), (c,b,x) , (a,b,y), (a,c,y), (b,a, y), (b,c,y), (c,a,y), (c,b,y) , (a,b,z), (a,c,z), (b,a,z), (b,c,z), (c,a,z), (c,b,z) ]
Теперь я могу создавать маршруты с тем же результатом. но проблема в том, что у меня будет более 43 тысяч уникальных мест, по оценкам это будет около 5.5B уникальных маршрутов, основанных на 3 типах. Поэтому я хотел бы иметь другой тип подхода, где я могу возобновить процесс, если что-то не получается. У нас нет проблем, если это займет несколько дней, но будет проблема, если мы начнем это с нуля, если что-то не получится.
Так что любая идея или концепция будет оценена по достоинству. Мы используем приложение Django для работы с этим. Вот реальные модели и код. Я планирую использовать эту функцию create_route в фоновом режиме с помощью celery и redis.
class Route(models.Model):
origin = models.ForeignKey(
Location, related_name="route_origin", on_delete=models.CASCADE
)
destination = models.ForeignKey(
Location, related_name="route_destination", on_delete=models.CASCADE
)
# Type options
VAN, REEFER, FLATBED = "V", "R", "F"
equipment_type = models.CharField(
max_length=50,
choices=(
(VAN, "Van"),
(REEFER, "Reefer"),
(FLATBED, "Flatbed"),
),
)
class Location(models.Model):
zip_code = models.CharField(max_length=5)
def create_routes():
locations = Location.objects.all()
equipment_types = [Route.VAN, Route.REEFER, Route.FLATBED]
for origin, destination in permutations(locations, 2):
for equipment_type in equipment_types:
Route.objects.create(
origin=origin,
destination=destination,
equipment_type=equipment_type,
)