0

假设我的应用程序需要通过网络传输 100 GB+ GZIP 压缩文件。我假设由于连接问题,这些文件可能经常无法在一次尝试中流式传输。因此,我正在寻找能够从失败点恢复流的方法。我知道开箱即用的 GZIP 不允许从文件中间流式传输。但我认为它具有可以序列化的状态。然后拥有该状态,应该可以将 GZIP 阅读器恢复到故障前的状态并继续从故障点进行流式传输。

我将不胜感激有关如何实现这一目标的任何经验/想法。我查看了 GZIPInputStream 并最终面对 Inflater 类中的本机方法并阅读 RFC。

4

1 回答 1

0

你如何解决一个大问题?把它们分成小块。这是我对此的初步看法,不了解文件类型、网络延迟、传输频率等方面的大量背景。

这就是我要做的。

  1. 将该文件分解为非常小的块。为简单起见,每个 1GB。
  2. 以唯一且连续的方式重命名这些文件。示例 {uuid}-1、{uuid}-2 等
  3. 将此元数据保存在数据存储中。基本上你想跟踪你创建的所有小块。这是元数据的样子。

[{
"file_name" : "b006194c-80ba-11e8-adc0-fa7ae01bbebc--1",
"size" : "1 GB",
"status" : "done"  
},
{
"file_name" : "dc903236-80ba-11e8-adc0-fa7ae01bbebc--2",
"size" : "1 GB",
"status" : "in_progress"  
}
]

  1. 然后你开始在网络上移动这些块。只要您有带宽,您首先选择哪个或同时选择多个都没关系。
  2. 如果任何块失败,您可以重试该块而不必重做整个事情。
  3. 你把它们放在一起(你也有关于如何把它们放在一起的命令)。

祝你好运。

于 2018-07-06T01:25:31.337 回答