Как мне массово загрузить на s3? - PullRequest
6 голосов
/ 20 марта 2009

Я недавно провела рефакторинг некоторого своего кода, чтобы заполнить строки в БД с помощью «загрузки данных», и это прекрасно работает - однако для каждой моей записи я должен загрузить 2 файла в s3 - это полностью разрушает великолепное обновление скорости, которое Я получал. Принимая во внимание, что мне удалось обработать 600+ этих документов / секунду, они теперь поступают со скоростью 1 / секунда из-за s3.

Каковы ваши обходные пути для этого? Глядя на API, я вижу, что это в основном RESTful, поэтому я не уверен, что делать - возможно, мне просто нужно вставить все это в базу данных. Текстовые файлы обычно не более 1,5 КБ. (другой файл, который мы добавляем, представляет собой текстовое представление в формате XML)

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

Кстати: наша текущая реализация использует Java; Я еще не пробовал темы, но это может быть вариант

Рекомендации

Ответы [ 2 ]

6 голосов
/ 20 марта 2009

Вы можете использовать функцию [putObjects] [1] JetS3t для загрузки нескольких файлов одновременно.

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

[1]: http://jets3t.s3.amazonaws.com/api/org/jets3t/service/multithread/S3ServiceMulti.html#putObjects(org.jets3t.service.model.S3Bucket, org.jets3t.service.model.S3Object [])

0 голосов
/ 29 марта 2018

Я только что нашел хорошее решение для загрузки всего каталога с php :

$client->uploadDirectory(
  SOURCE_FOLDER,
  YOUR_BUCKET_NAME,
  DESTINATION,
  array(
    'concurrency' => 5,
    'debug'          => TRUE,
    'force'            => FALSE,
    'params'        => array(
      'ServerSideEncryption' => 'AES256',
    ),
  )
);
...