【问题标题】:Java OutputStream of Postgres export directly to InputStream of S3 uploadPostgres的Java OutputStream直接导出到S3上传的InputStream
【发布时间】:2017-01-03 04:06:44
【问题描述】:

我有一项每天运行的服务,其目的是从 Postgres DB 导出增量并将其上传到 S3 存储桶。

我正在使用CopyManagercopyOut 方法。 在 copyOut 我有 2 个选项: 一个作家 b) 输出流

另一方面,我有一个 Amazon S3 客户端,它有这个 PutObjectRequest 接受 FileInputStream

目前我们有两种方法可以做到这一点: 1.导出到文件并从文件上传 2. 导出到ByteArrayOutputStream 并获取它们底层byte[] 并将其传递给S3上传器的InputStream

是否有可能以某种方式连接我们不必使用此中间文件或可能非常大的字节数组的那两个?

也就是说我想直接上传db delta

【问题讨论】:

    标签: java postgresql amazon-s3 inputstream outputstream


    【解决方案1】:

    使用你现有的方法还不错,使用流时你可以读取流,一旦你有足够的数据就直接发送到 s3。

    您还可以设置 AWS 管道将数据从 Postgres RDS 实例提取到 S3,您可以查看 https://stackoverflow.com/a/34120407/4296747。 AWS 没有关于如何从 Postgres 执行此操作的很好的文档,但使用 mysql 时您会发现很多可用的文档

    【讨论】:

    • 目前的解决方案还不错吧?文件可能很大 - 我们不希望将大磁盘附加到我们的 VM。字节数组可能很大 - 我们不希望 VM 上有太多 RAM。我目前正在开发一个自定义的 OutputStream,它将缓冲转储的数据并使用分段上传上传到 S3。
    • 你没有提到增量的大小。你应该看看管道然后
    • 我刚刚看到 CopyOut 对象允许我逐行获取导出的数据。然后我可以缓冲它们,例如在配置的 MB 批次中并作为分段上传推送。
    猜你喜欢
    • 2015-10-26
    • 1970-01-01
    • 2019-04-05
    • 2018-04-07
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    • 2012-03-14
    • 2011-01-06
    相关资源
    最近更新 更多