2016-08-26 39 views
0

私は、Postgres DBからdeltaをエクスポートしてS3バケットにアップロードするという目的を毎日実行するサービスを提供しています。PostgresのJava OutputStreamをS3のInputStreamに直接エクスポートする

私はCopyManagercopyOutの方法を使用しています。私はFileまたはInputStream受け入れるこのPutObjectRequest持つAmazon S3のクライアントを持っている一方 a)のライター B)のOutputStream

copyOutで は、私は2つのオプションがあります。

はそれが可能です 1.エクスポートファイルとByteArrayOutputStreamにファイルから 2.エクスポートをアップロードし、彼らはbyte[]の基礎となる取得し、S3のアップローダーの入力ストリームにこれを渡すために:

は現在、我々はこれを行うための2つの方法がありますどういうわけか、私たちがこの中間ファイルを使用する必要がないものと、おそらく非常に大きなバイト配列を接続しますか?言い換えれば

私は直接ストリームを使用しているときに、ストリームを読み取ることができるとすぐに十分なデータを持っているとして、あなたはS3に直接送信、既存の方法はそれほど悪くはない使用デシベルデルタ

答えて

0

をアップロードしたいと思います。

また、AWSパイプラインをセットアップして、Postgres RDSインスタンスからS3にデータを抽出することもできます。https://stackoverflow.com/a/34120407/4296747をチェックできます。 AWSはPostgresからの操作方法についてはあまりよく書かれていませんが、mysqlを使用する際には十分に利用可能です。

+0

現在の解決方法はありますか? ファイルが大きくなる可能性があります。私たちは大きなディスクをVMに接続したくありません。 バイト配列が大きいかもしれません - 私たちはVM上に多くのRAMを必要としません。 私は現在、ダンプされたデータをバッファし、マルチパートアップロードを使用してS3にアップロードするカスタムOutputStreamを作成しています。 – bodziec

+0

デルタのサイズはよく言及していません。 –

+0

パイプラインを見てください。CopyOutオブジェクトを使用すると、エクスポートされたデータをそのまま1行ずつフェッチすることができます。次に、設定されたMBバッチでそれらをバッファリングし、マルチパートアップロードとしてプッシュできます。 – bodziec

関連する問題