Удаление данных из базы данных по частям в django - PullRequest
0 голосов
/ 22 марта 2020

просто скажите, что я извлек данные в виде кусков из таблицы с 20 миллионами записей, и мне нужно обработать все данные, и мне нужно удалить целые данные только после того, как все будет обработано (мое условие - я не могу удалить внутри l oop, где он выбирается)

chunk = 10000
id_gte = 1
id_lt = 20000000
delete_query = MyModel.objects.none()
for i in range(id_gte, id_lt, chunk):
    data = MyModel.objects.filter(id__gte=i, id__lt=i+chunk)
    print(data)
    delete_query |= data

теперь, если я хочу удалить данные ... которые я получил в l oop, так что я могу сделать

delete_query.delete()

Так что я сомневаюсь.

  1. Влияет ли время на удаление удаляемых данных, зависит от того, сколько данных я удаляю одновременно? Как и выше, я пытаюсь удалить все 20000000 строк одновременно. Будет ли лучше удалить данные кусками? Скажем, в delete_query я использую al oop, чтобы получить кэшированные фрагменты набора запросов размером 10000 и удалить их? Таким образом, в целом это займет, может быть, то же время, но заблокирует дБ для меньших времен?
  2. Проводится ли какая-либо оценка для удаления данных из базы данных? если да, то выполняется ли повторная оценка запроса для удаления данных. Я имею в виду в приведенном выше коде .... делает delete_query.delete() делает delete_query для повторной оценки перед удалением данных, или он будет использовать кэш delete_query.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...