Создание временного файла для загрузки на S3 - PullRequest
0 голосов
/ 24 марта 2020

Я пишу задание cron, которое берет таблицу Postgres и загружает таблицу на S3.

Я планирую сделать следующее:

  1. Конвертировать таблицу в csv и сохранить на диске.

  2. Извлечь файл с диска и сохранить в s3, используя составную часть.

  3. Удалить файл с диска.

Вопросы:

  1. Должен ли я скопировать файл на диск? Можно ли как-нибудь скопировать временно на диск без явного удаления файла после его загрузки?

  2. Имеет ли смысл делать это в памяти? Postgres копировать только записи в OutputStream. AFAIK нет способа загрузить поток вывода на S3.

1 Ответ

0 голосов
/ 24 марта 2020

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

Если вы go с Python, то в документации S3 MultipartUpload говорится, что он допускает bytes или файл для каждого MultipartUploadPart . Это должно быть похожим для других языков. Таким образом, вы можете прочитать всю таблицу или сегмент, преобразовать их в csv-подобные строки, преобразовать их в bytes и затем запустить MultipartUpload. Здесь не нужны файлы на диске.

Если вы go с Java, вы можете использовать InputStreams в качестве источника для вашей загрузки. Чтобы преобразовать ваш OutputStream в InputStream, взгляните на этот ответ .

AmazonS3 s3 = new AmazonS3Client(new BasicAWSCredentials("accessKey","secretKey"));
s3.putObject(new PutObjectRequest("mybucket", "myfile", inputStream));

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

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