Как вы ищите ведро Amazon S3? - PullRequest
       9

Как вы ищите ведро Amazon S3?

129 голосов
/ 12 февраля 2011

У меня есть корзина с тысячами файлов. Как я могу искать ведро? Есть ли инструмент, который вы можете порекомендовать?

Ответы [ 17 ]

237 голосов
/ 17 февраля 2014

Просто примечание, которое можно добавить здесь: это сейчас 3 года спустя, но этот пост занимает первое место в Google, когда вы набираете «Как искать S3 Bucket».

Возможно, вы ищете что-то более сложное, но если вы оказались здесь, пытаясь выяснить, как просто найти объект (файл) по его названию, это безумно просто:

откройте ведро, выберите «нет» справа и начните вводить имя файла.

http://docs.aws.amazon.com/AmazonS3/latest/UG/ListingObjectsinaBucket.html

80 голосов
/ 14 мая 2016

Вот короткий и уродливый способ поиска по именам файлов с использованием AWS CLI :

aws s3 ls s3://your-bucket --recursive | grep your-search | cut -c 32-
22 голосов
/ 13 февраля 2011

Существует (как минимум) два разных варианта использования, которые можно описать как «поиск в корзине»:

  1. Поиск чего-либо внутри каждого объекта, хранящегося введро;это предполагает общий формат для всех объектов в этом сегменте (скажем, текстовых файлов) и т. д. и т. д. Для чего-то подобного вы вынуждены делать то, что только что ответил Коди Коглан.Документы AWS S3 содержат пример кода, показывающего, как это сделать с помощью AWS SDK для Java: Вывод списка ключей Использование AWS SDK для Java (там вы также найдете примеры PHP и C #).

  2. Элемент списка Поиск чего-либо в объекте ключи , содержащиеся в этом ведре;S3 имеет поддержку частичного для этого в форме разрешения префиксов точных совпадений + свертывающихся совпадений после разделителя.Более подробно это объясняется в Руководство для разработчиков AWS S3 .Это позволяет, например, реализовать «папки», используя в качестве объектных ключей что-то вроде

    folder/subfolder/file.txt
    Если вы следуете этому соглашению, большинство графических интерфейсов S3 (таких как Консоль AWS) покажет вам представление папки вашего сегмента.
22 голосов
/ 12 февраля 2011

S3 не имеет собственного «поиска в этом сегменте», поскольку фактическое содержимое неизвестно - также, поскольку S3 основано на ключах / значениях, нет собственного способа получить доступ ко многим узлам одновременно, а более традиционным хранилищам данных, которые предлагают1001 * (в модели SQL).

Вам нужно будет выполнить ListBucket, чтобы получить список объектов в корзине, а затем выполнить итерацию по каждому элементу, выполняя пользовательскую операцию, которую вы реализуете - чтоэто ваш поиск.

19 голосов
/ 09 февраля 2013

Существует несколько вариантов, ни один из которых не является простым полнотекстовым решением "один выстрел":

  1. Поиск по шаблону имени ключа : поиск ключей, начинающихся с некоторой строки-если вы тщательно продумываете имена ключей, у вас может быть довольно быстрое решение.

  2. Поиск метаданных, прикрепленных к ключам : при публикации файла в AWS S3 вы можете обработатьсодержимого, извлеките некоторую метаинформацию и вложите эту метаинформацию в виде пользовательских заголовков в ключ.Это позволяет извлекать ключевые имена и заголовки без необходимости извлекать полный контент.Поиск должен быть выполнен последовательно, для этого не существует опции "sql like".С большими файлами это может сэкономить много сетевого трафика и времени.

  3. Хранить метаданные на SimpleDB : как предыдущая точка, но с сохранением метаданных на SimpleDB.Здесь у вас есть sql как операторы select.В случае больших наборов данных вы можете достичь пределов SimpleDB, которые могут быть преодолены (разделить метаданные между несколькими доменами SimpleDB), но если вы зайдете очень далеко, вам может понадобиться использовать другой тип базы данных метаданных.

  4. Последовательный полнотекстовый поиск содержимого - обработка всех ключей по одному.Очень медленно, если у вас слишком много ключей для обработки.

Мы храним 1440 версий файла в день (по одной в минуту) в течение нескольких лет, используя версионную корзину, этолегко возможно.Но получение более старой версии требует времени, поскольку нужно последовательно переходить от версии к версии.Иногда я использую простой CSV-индекс с записями, показывающими время публикации плюс идентификатор версии, имея это, я могу довольно быстро перейти к более старой версии.

Как видите, AWS S3 сам по себе не предназначен для полнотекстового поиска., это простой сервис хранения.

17 голосов
/ 06 декабря 2016

AWS выпустил новый сервис для запроса сегментов S3 с помощью SQL: Amazon Athena https://aws.amazon.com/athena/

4 голосов
/ 17 февраля 2016

Поиск по префиксу в консоли S3

непосредственно в представлении консоли AWS.

enter image description here

Скопируйте нужные файлы с помощью s3-dist-cp

Если у вас есть тысячи или миллионы файлов, другой способ получить нужные файлы - скопировать их в другое место, используя распределенную копию .Вы запускаете это на EMR в задании Hadoop.Крутая вещь в AWS состоит в том, что они предоставляют свою собственную версию S3 s3-dist-cp .Это позволяет группировать нужные файлы с помощью регулярного выражения в поле groupBy.Вы можете использовать это, например, в пользовательском шаге EMR

[
    {
        "ActionOnFailure": "CONTINUE",
        "Args": [
            "s3-dist-cp",
            "--s3Endpoint=s3.amazonaws.com",
            "--src=s3://mybucket/",
            "--dest=s3://mytarget-bucket/",
            "--groupBy=MY_PATTERN",
            "--targetSize=1000"
        ],
        "Jar": "command-runner.jar",
        "Name": "S3DistCp Step Aggregate Results",
        "Type": "CUSTOM_JAR"
    }
]
4 голосов
/ 18 июня 2012

Учитывая, что вы находитесь в AWS ... Я думаю, вы захотите использовать их инструменты CloudSearch. Поместите данные, которые вы хотите найти, в их службу ... пусть они указывают на клавиши S3.

http://aws.amazon.com/cloudsearch/

2 голосов
/ 22 ноября 2018

Если вы работаете в Windows и у вас нет времени найти хорошую альтернативу grep, быстрый и грязный способ будет выглядеть так:

aws s3 ls s3://your-bucket/folder/ --recursive > myfile.txt

, а затем выполните быстрыйпоиск в myfile.txt

Бит «папка» не является обязательным.

PS, если у вас не установлен AWS CLI - вот один вкладыш, использующий менеджер пакетов Chocolatey

choco install awscli

PPS Если у вас нет менеджера пакетов Chocolatey - получите его!Ваша жизнь в Windows станет в 10 раз лучше.(Я никак не связан с Chocolatey, но на самом деле это просто необходимо).

1 голос
/ 20 сентября 2011

Другим вариантом является зеркальное отображение корзины S3 на вашем веб-сервере и ее локальное перемещение. Хитрость в том, что локальные файлы пусты и используются только в качестве каркаса. В качестве альтернативы, локальные файлы могут содержать полезные метаданные, которые вы обычно должны получать из S3 (например, размер файла, mimetype, author, timestamp, uuid). Когда вы предоставляете URL для загрузки файла, выполняйте локальный поиск и указывайте ссылку на адрес S3.

Локальный обход файлов прост, и этот подход к управлению S3 не зависит от языка. Локальный обход файлов также позволяет избежать обслуживания и запросов к базе данных файлов или задержек при выполнении серии удаленных вызовов API для аутентификации и получения содержимого корзины.

Вы можете разрешить пользователям загружать файлы непосредственно на ваш сервер через FTP или HTTP, а затем передавать пакет новых и обновленных файлов в Amazon в непиковое время, просто повторяя каталоги для файлов любого размера. По завершении передачи файла в Amazon замените файл веб-сервера на пустой файл с тем же именем. Если локальный файл имеет какой-либо размер файла, подайте его напрямую, поскольку он ожидает пакетной передачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...