2016-08-26 71 views
0

我有一個每日運行的服務,其目的是從Postgres DB導出增量並將其上傳到S3存儲桶。Postgres的Java OutputStream直接導出到S3上傳的InputStream

我使用的是CopyManagercopyOut方法。 在copyOut我有2種選擇: 一個)作家 b)中的OutputStream

在另一方面我有具有這種PutObjectRequest接受FileInputStream亞馬遜S3客戶端。

目前,我們有2種方式這樣做的:1。 導出到文件並從文件 2.出口上傳到ByteArrayOutputStream並得到他們根本byte[]和它傳遞給S3上傳的InputStream的

是否有可能以某種方式連接那些我們不必使用這個中間文件或者可能非常大的字節數組?

換句話說,我想直接上傳分貝增量

回答

0

使用現有的方法並不壞,使用流時,你可以讀數據流,一旦你有足夠的數據可以直接發送到S3 。

您也可以設置AWS管道將數據從Postgres RDS實例提取到S3中,您可以檢查https://stackoverflow.com/a/34120407/4296747。 AWS對於如何從Postgres執行它沒有那麼好的文檔,但是當使用mysql時你會發現很多可用的文件

+0

當前的解決方案不錯? 文件可能很大 - 我們不希望將大磁盤連接到我們的VM。 字節數組可能很大 - 我們不需要VM上的大量內存。 我目前正在使用自定義OutputStream來緩存轉儲的數據,並使用分段上傳將數據上傳到S3。 – bodziec

+0

你沒有提到三角洲的大小。你應該看看管道,然後 –

+0

我剛纔看到CopyOut對象允許我一行一行地取出導出的數據。然後我可以將它們緩存在配置的MB批處理中,並作爲分段上傳進行推送。 – bodziec