Как сохранить миллионы файлов в S3, чтобы произвольный будущий поиск по значениям ключей / путей выполнялся быстро - PullRequest
1 голос
/ 27 мая 2020

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

Я не могу использовать префикс, потому что интересующий текст не всегда находится в начале. Я вижу другие сообщения ( здесь и здесь ), в которых говорится, что это известное ограничение в API S3. Эти сообщения сделаны более чем за 3 года a go, поэтому мой первый вопрос: существует ли это ограничение по-прежнему? существуют ли передовые методы обхода миллионов файлов S3? Я видел, как некоторые люди говорили, что вы можете хранить имена ключей в реляционной базе данных, Elasticsearch или в плоском файле. Один из этих подходов более распространен, чем другие?

Кроме того, из любопытства, почему S3 не поддерживает такой базовый c вариант использования в службе (S3), которая является столь признанным основным продуктом общей платформы AWS? Я заметил, что у GCS в Google Cloud есть подобное ограничение. Неужели действительно сложно выполнять поиск по строкам с именами ключей с большим масштабом?

Ответы [ 2 ]

1 голос
/ 28 мая 2020

Вы можете рассмотреть возможность использования Amazon S3 Inventory , который может предоставлять ежедневный или еженедельный CSV-файл, содержащий список всех объектов в корзине.

Затем вы можете загрузить этот файл в базу данных или даже написать сценарий для ее анализа. Или, возможно, даже просто поиграйте с ним в Excel.

1 голос
/ 27 мая 2020

S3 - хранилище объектов, концептуально похожее на файловую систему. Я бы никогда не попытался создать среду, подобную базе данных, на основе имен файлов в файловой системе, и я бы не стал в S3.

Тем не менее, если это то, что у вас есть, я бы начал с запуска кода, чтобы получить все текущих имен файлов в какую-либо базу данных. DynamoDB не может выполнять запросы по регулярным выражениям, но любые из PostgreSQL, MySQL, Aurora и ElasticSearch могут. Итак, начните с перечисления каждого файла и поместите имя файла и местоположение S3 в структуру, подобную базе данных. Затем создайте лямбда-выражение, которое уведомляется о любых изменениях (см. эту ссылку для получения дополнительной информации), которая будет делать соответствующие вещи с вашим резервным хранилищем при добавлении или удалении файла.

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

Наконец, вам понадобится интерфейс к резервному хранилищу для запросов. Для этого, вероятно, потребуется какой-то сервер. Это может быть простой API-шлюз для Lambda или что-то гораздо более сложное.

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