Как удалить / подсчитать объекты в ведре s3?

Я знаю, что это частый вопрос, но, похоже, на него нет хороших ответов.

У меня ведро с каплями (понятия не имею, сколько) количество файлов в них. Их все в пределах 2к штук.

1) Как узнать, сколько файлов у меня БЕЗ перечисления? Я использовал s3cmd.rb, aws / s3 и jets3t, и лучшее, что я могу найти, - это команда для подсчета первых 1000 записей (действительно выполняющих GETS для них).

Я также использовал апплет jets3t, потому что с ним действительно приятно работать, но даже то, что я не могу перечислить все свои объекты, потому что у меня заканчивается пространство кучи. (предположительно потому, что он выполняет GETS на всех из них и сохраняет их в памяти)

2) Как я могу просто удалить ведро? Лучшее, что я видел, - это параллельный цикл удаления, и у него есть проблемы, потому что иногда он пытается удалить тот же файл. Это то, что делают все команды deleteall, с которыми я сталкивался.

Что вы делаете, ребята, которые хвастались размещением миллионов изображений / текстов ?? Что произойдет, если вы захотите его удалить?

3) Наконец, есть ли альтернативные ответы на этот вопрос? Все эти файлы являются файлами txt / xml, поэтому я даже не уверен, что S3 вызывает такую ​​озабоченность - может мне стоит переместить их в своего рода базу данных документов ??

Все сводится к тому, что API Amazon S3 просто пропускает две очень важные операции - COUNT и DEL_BUCKET. (на самом деле есть команда удаления ведра, но она работает только тогда, когда ведро пусто) Если кто-то придумает метод, который не отстой для выполнения этих двух операций, я с радостью откажусь от большого вознаграждения.

ОБНОВЛЕНИЕ

Просто чтобы ответить на несколько вопросов. Причина, по которой я спрашиваю об этом, заключалась в том, что я в течение последнего года или около того хранил сотни тысяч, больше похоже на миллионы 2k txt- и xml-документов. В последний раз, пару месяцев назад, я хотел удалить корзину, на это потребовались ДНИ, потому что корзина должна быть пустой, прежде чем вы сможете ее удалить. Это было такой головной болью, что я боюсь, что когда-нибудь придется делать это снова без поддержки API.

ОБНОВЛЕНИЕ

это качает дом!

http://github.com/SFEley/s3nuke/

Я записал пару гигов на 1-2k файлов за считанные минуты.


person eyberg    schedule 31.03.2009    source источник


Ответы (7)


Я, безусловно, не из тех «парней, которые хвастались размещением миллионов изображений / текстов», так как у меня их всего несколько тысяч, и, возможно, это не тот ответ, который вы ищете, но я некоторое время смотрел на это назад.

Насколько я помню, есть команда API с именем HEAD, которая получает информацию об объекте, а не целиком, как это делает GET, что может помочь в подсчете объектов.

Что касается удаления корзин, то в то время, когда я искал, API определенно указывал, что корзина должна быть пустой, поэтому вам нужно сначала удалить все объекты.

Но я никогда не использовал ни одну из этих команд, потому что я использовал S3 в качестве резервной копии, и в конце я написал несколько подпрограмм, которые загружали файлы, которые я хотел, в S3 (так что эта часть была автоматизирована), но никогда не беспокоился о восстановлении / удаление / управление файлами. Для этого используйте Bucket Explorer, который сделал все, что мне нужно. В моем случае не стоило тратить время, когда за 50 долларов я могу получить программу, которая делает все, что мне нужно. Вероятно, есть и другие, которые делают то же самое (например, CloudBerry)

В вашем случае с Bucket Explorer вы можете щелкнуть правой кнопкой мыши по ведру и выбрать удаление или щелкнуть правой кнопкой мыши и выбрать свойства, и он будет подсчитывать количество объектов и размер, который они занимают. Конечно, он не загружает весь объект. (Например, последнее ведро, которое я смотрел, было 12 ГБ и около 500 файлов, и для загрузки 12 ГБ потребовались бы часы, тогда как размер и количество возвращаются через секунду или две). И если есть предел, то это точно не 1000.

Надеюсь это поможет.

person sgmoore    schedule 16.07.2009

«Список» не получит данные. Я использую s3cmd (скрипт на Python) и сделал бы что-то вроде этого:

s3cmd ls s3://foo | awk '{print $4}' | split -a 5 -l 10000 bucketfiles_
for i in bucketfiles_*; do xargs -n 1 s3cmd rm < $i & done

Но сначала проверьте, сколько файлов bucketfiles_ вы получите. Для каждого файла будет запущен один s3cmd.

Это займет время, но не дни.

person Thomas    schedule 22.07.2009
comment
Я действительно пробовал этот метод - я только что пришел к выводу, что S3 не может поддерживать удаление корзин прямо сейчас, и что с его ужасающей скоростью доступа у меня во рту остается чрезвычайно горький привкус для S3. - person eyberg; 24.07.2009
comment
s3cmd del s3cmd ls s3://Mybigbucket/somepattern | awk '{print $4}'. Да это больно - person BozoJoe; 20.02.2011

1) Что касается вашего первого вопроса, вы можете перечислить элементы в корзине, фактически не извлекая их. Это можно сделать с помощью SOAP. и REST API. Как видите, вы можете определить максимальное количество элементов для списка и позицию, с которой будет начинаться список (маркер). Подробнее об этом читайте здесь.

Я не знаю какой-либо реализации разбиения на страницы, но особенно для интерфейса REST было бы очень легко реализовать его на любом языке.

2) Я считаю, что единственный способ удалить ведро - сначала очистить его от всех элементов. См. Также этот вопрос.

3) Я бы сказал, что S3 очень хорошо подходит для хранения большого количества файлов. Однако это зависит от того, что вы хотите сделать. Планируете ли вы также хранить двоичные файлы? Вам нужно выполнить какие-либо запросы или достаточно просто перечислить файлы?

person kgiannakakis    schedule 16.07.2009
comment
даже перечисление ключей в 1000 раз или как там было - это заняло целую вечность - больше дня, и я, наконец, убил его после того, как мне стало скучно и я заметил, что моя куча слишком переполнена. - person eyberg; 16.07.2009
comment
Я не думаю, что есть вызов API, чтобы просто получить количество элементов. Вероятно, вы использовали инструмент, который также получает содержимое файлов - вот почему это заняло так много времени. Просто используйте Fiddler или какой-либо другой инструмент для отправки запроса корзины GET (см. Ссылку REST API в моем ответе). Получить xml обратно не займет много времени. Боюсь, что у меня нет такого большого ведра, чтобы самому это проверить. - person kgiannakakis; 17.07.2009

У меня была такая же проблема с удалением сотен тысяч файлов из корзины. Возможно, стоит запустить экземпляр EC2 для выполнения параллельного удаления, поскольку задержка для S3 мала. Я думаю, что можно заработать немного денег на хостинге нескольких серверов EC2 и взимании платы с людей за быстрое удаление корзин. (По крайней мере, пока Amazon не изменит API)

person bertrandom    schedule 22.07.2009

Старая ветка, но все еще актуальна, так как я искал ответ, пока не понял это. Я хотел подсчитать количество файлов с помощью инструмента на основе графического интерфейса (т.е. без кода). Я уже использую инструмент под названием 3Hub для перетаскивания переводов на S3 и обратно. Я хотел знать, сколько файлов у меня было в определенной корзине (я не думаю, что биллинг разбивает ее по сегментам).

So, using 3Hub, 
- list the contents of the bucket (looks basically like a finder or explorer window)
- go to the bottom of the list, click 'show all'
- select all (ctrl+a)
- choose copy URLs from right-click menu
- paste the list into a text file (I use TextWrangler for Mac) 
- look at the line count  

У меня в корзине было 20521 файл, и я подсчитал их менее чем за минуту.

Я хотел бы знать, нашел ли кто-нибудь лучший способ, поскольку это займет некоторое время с сотнями тысяч файлов.

person Darby    schedule 15.02.2014

Чтобы подсчитать объекты в ведре S3:

Перейдите в раздел «AWS Billing», затем «Отчеты», а затем «Отчеты об использовании AWS». Выберите Amazon Simple Storage Service, затем Operation StandardStorage. Загрузите файл CSV, который включает UsageType StorageObjectCount, в котором указано количество элементов для каждой корзины.

person Kenan    schedule 17.06.2015
comment
Где второй способ посчитать? - person Volte; 26.08.2015

Считать

aws s3 ls s3://mybucket/ --recursive | wc -l 

Из этого сообщения

Удалить

aws s3 rm --recursive s3://mybucket/ && aws s3 rb s3://mybucket/

Это удаляет все элементы, а затем ведро.

person George Ogden    schedule 20.03.2021