Удаление очень большой папки в Google Cloud Storage - PullRequest
0 голосов
/ 18 апреля 2020

У меня очень большая папка в Google Cloud Storage, и в настоящее время я удаляю папку со следующим кодом django - python при использовании Google App Engine в течение 30 секунд по умолчанию для тайм-аута http.

def deleteStorageFolder(bucketName, folder):
    from google.cloud import storage
    cloudStorageClient = storage.Client()
    bucket = cloudStorageClient.bucket(bucketName)
    logging.info("Deleting : " + folder)
    try:
        bucket.delete_blobs(blobs=bucket.list_blobs(prefix=folder))
    except Exception as e:
        logging.info(str(e.message))

Действительно невероятно, что Google Cloud ожидает, что приложение запросит информацию об объектах внутри папки один за другим, а затем удалит их один за другим.

Очевидно, что это происходит из-за тайм-аута. Какова будет лучшая стратегия здесь?

(Должен быть способ удаления родительского объекта из корзины, он должен удалить все связанные дочерние объекты где-то в фоновом режиме, и мы удалим связанные данные из нашей модели. Тогда Google Storage может свободно удаляйте данные всякий раз, когда они этого хотят. Но, насколько я понимаю, это не так, как все реализовано)

Ответы [ 2 ]

2 голосов
/ 19 апреля 2020

2 простых варианта, на мой взгляд, пока клиентская библиотека не поддерживает удаление в пакетном режиме - см. https://issuetracker.google.com/issues/142641783:

  1. , если образ GAE включает gsutil cli, вы можете выполнить gsutil -m rm ... в подпроцессе
  2. мой любимый, используйте библиотеку gcsfs вместо библиотеки G. Он поддерживает пакетное удаление по умолчанию - см. https://gcsfs.readthedocs.io/en/latest/_modules/gcsfs/core.html#GCSFileSystem .rm
1 голос
/ 18 апреля 2020

Есть обходной путь. Вы можете сделать это в 2 шага

  1. «Переместить» файл для удаления в другое ведро с помощью Transfert enter image description here

Создать перевод из ваше ведро, с фильтрами, которые вы хотите, чтобы другое ведро (создайте временное, если это необходимо). Установите флажок «удалить из источника после передачи» enter image description here

После успешной передачи удалите временное ведро. Если это слишком долго, у вас есть другой обходной путь.

  • Go на страницу корзины
  • Нажмите на жизненный цикл enter image description here
  • Установить до жизненного цикла, в котором вы удаляете файл с возрастом> 0 дней enter image description here

В обоих случаях вы используете пакетную функцию Google Cloud, потому что сами это тоже слишком долго!

...