Почему удаление объектов в AWS S3 происходит намного медленнее, чем их создание?

У меня есть лямбда-функция AWS, которая следит за корзиной S3. Когда изображение загружается в корзину, лямбда-функция создает миниатюру изображения. Однако я допустил ошибку в функции и сохранил преобразованный файл в том же каталоге, за которым наблюдал, создав бесконечный цикл.

Он работал примерно минуту, прежде чем я остановил его, и за это время создал 600 000 изображений. Однако удаление этих изображений (с помощью консоли AWS) заняло около 20 минут.

Почему такая разница? Меня интересуют низкоуровневые причины этого.


person andydavies    schedule 12.03.2018    source источник
comment
Простое объяснение заключается в том, что удаление — гораздо более затратная операция базы данных, поскольку механизм должен сначала найти строку, а затем удалить ее. В то время как операция вставки (или массовой вставки с 600 000 строк) не требует поиска. Подробное объяснение, вероятно, потребует, чтобы разработчики AWS в Amazon объяснили реализацию серверной части на уровне ЦП. Может быть, у кого-то есть такие знания и есть желание поделиться?   -  person Jacob H    schedule 12.03.2018
comment
@JacobH, это тот уровень, который мне нужен, спасибо. Я уберу реализацию из вопроса, так как это может быть более общая причина, подобная той, которую вы указали, а не что-то конкретное для AWS.   -  person andydavies    schedule 12.03.2018
comment
Вы должны хотя бы попытаться сравнить яблоки с яблоками здесь и написать функцию удаления вместо использования консоли AWS. Возможно, консоль просто неэффективна при таком типе операций.   -  person Mark B    schedule 12.03.2018


Ответы (2)


Согласно этой документации https://docs.aws.amazon.com/AmazonS3/latest/dev/delete-or-empty-bucket.html удаление — это «вставка маркера удаления». Таким образом, это может объяснить, почему удаление происходит так медленно по сравнению с загрузкой, которая обеспечивает только окончательную согласованность.

person webofmars    schedule 11.05.2020

Корзины Amazon S3 во всех регионах обеспечивают согласованность чтения после записи для PUTS новых объектов и конечную согласованность для перезаписываемых PUTS и DELETE.

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

Однако я предполагаю, что основная причина связана с использованием веб-консоли AWS, где действие «удалить» может занять больше времени для отражения веб-консоли. Напротив, если вы запускаете операцию удаления с помощью AWS CLI, все должно быть наоборот.

person Ashan    schedule 12.03.2018
comment
Дан +1, потому что это абсолютно верно, даже если наблюдаемое поведение не соответствует описанию. Это должно быть правдой, насколько мы можем понять, что реализация AWS не идет под капотом... - person webofmars; 12.05.2020
comment
Это не было моим опытом. DELETE медленнее, чем PUTS, по крайней мере, для небольших файлов. - person bemoore; 25.08.2020