Как мне удалить / посчитать объекты в корзине s3? - PullRequest
9 голосов
/ 31 марта 2009

Так что я знаю, что это общий вопрос, но, похоже, на него нет хороших ответов.

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

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

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

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

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

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

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

UPDATE

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

UPDATE

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

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

За пару минут я получил пару хороших концертов по 1-2 тыс. Файлов.

Ответы [ 6 ]

1 голос
/ 22 июля 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.

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

1 голос
/ 16 июля 2009

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

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

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

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

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

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

0 голосов
/ 17 июня 2015

Для подсчета объектов в корзине S3:

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

0 голосов
/ 16 февраля 2014

Старая тема, но все еще актуальна, так как я искал ответ, пока я только не понял это. Я хотел подсчитать количество файлов с помощью инструмента на основе графического интерфейса (т.е. без кода). Я уже использую инструмент под названием 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 файлов, и я подсчитал количество файлов менее чем за минуту.

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

0 голосов
/ 22 июля 2009

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

0 голосов
/ 16 июля 2009

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

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

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

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

...