私は、Postgres DBからdeltaをエクスポートしてS3バケットにアップロードするという目的を毎日実行するサービスを提供しています。PostgresのJava OutputStreamをS3のInputStreamに直接エクスポートする
私はCopyManager
とcopyOut
の方法を使用しています。私はFile
またはInputStream
受け入れるこのPutObjectRequest
持つAmazon S3のクライアントを持っている一方 a)のライター B)のOutputStream
:copyOut
で は、私は2つのオプションがあります。
はそれが可能です 1.エクスポートファイルとByteArrayOutputStream
にファイルから 2.エクスポートをアップロードし、彼らはbyte[]
の基礎となる取得し、S3のアップローダーの入力ストリームにこれを渡すために:
は現在、我々はこれを行うための2つの方法がありますどういうわけか、私たちがこの中間ファイルを使用する必要がないものと、おそらく非常に大きなバイト配列を接続しますか?言い換えれば
私は直接ストリームを使用しているときに、ストリームを読み取ることができるとすぐに十分なデータを持っているとして、あなたはS3に直接送信、既存の方法はそれほど悪くはない使用デシベルデルタ
現在の解決方法はありますか? ファイルが大きくなる可能性があります。私たちは大きなディスクをVMに接続したくありません。 バイト配列が大きいかもしれません - 私たちはVM上に多くのRAMを必要としません。 私は現在、ダンプされたデータをバッファし、マルチパートアップロードを使用してS3にアップロードするカスタムOutputStreamを作成しています。 – bodziec
デルタのサイズはよく言及していません。 –
パイプラインを見てください。CopyOutオブジェクトを使用すると、エクスポートされたデータをそのまま1行ずつフェッチすることができます。次に、設定されたMBバッチでそれらをバッファリングし、マルチパートアップロードとしてプッシュできます。 – bodziec