如何检查一个大的 CDN 文件是否更新而不在存储库中存储相同的文件并且没有数据库?
How to check if a big CDN file is updated without storing the same file within the repository and without database?
我有一个大文件要解析存储在 CDN 上。
每次我启动我的程序时,都会检查以控制 CDN 文件是否已更新。如果是这样,我需要检索此 CDN 文件中包含的更新信息。
目前的解决方案是在存储库中也有一个 CDN 文件的副本,并通过少量操作检查是否有更改:
- 在本地下载CDN文件
- 使用 ShellScript 测试本地文件和 CDN 文件是否不同
are_different_current_and_remote()
{
diff <(curl -s "") "" > /dev/null
if [ $? != 0 ]; then
return 0
else
return 1
fi
}
- 如果是,CDN文件替换本地文件
我发现这个过程效率不高,但我想知道哪种方法最好。
我想到了第二种方法。
- 使用此命令检索 CDN 中远程文件的校验和
curl -s http://remotefile|sha1sum
并将其存储在存储库中的文件中,以便下次检查是否存在差异 AKA 更新。
我也不是这个解决方案的忠实粉丝,但我认为这是一个改进,因为存储库中 space 更少。
您有更好的方法吗?
非常感谢。
获取校验和并与本地计算的版本进行比较将是最好的解决方案。在您使用 curl -s
的示例中,您仍然需要下载整个文件,然后在本地计算校验和。
我建议每次更新 CDN 中的文件并以某种方式将其与文件一起存储在 CDN 中时计算校验和。一些 CDN 提供商已经为您做到了。取决于您的 CDN 提供商的智能程度(一些示例):
将 SHA 校验和存储在额外的单独文件中,该文件逐渐变得比资产本身更小且下载速度更快(所以你会这样做 curl -s https://cdn/remotefile.sha1
)
一些 CDN 提供商在每次上传文件时计算校验和,然后将其作为自定义 X-Checksum-Sha1
header 公开以响应 HTTP HEAD
请求(再次快速因为它不检索文件内容)。
一些 CDN 提供商有单独的 REST API,允许存储和检索有关文件的元数据,您可以利用它来存储校验和、上次更新日期、版本标签或其他内容。
如果完整性检查是强制性的并且在使用软件之前是必要的,我建议在客户端也做类似的缓存,每次你获取新文件时计算校验和并存储它(例如在文件,注册表中......)所以启动是在不需要文件更新的情况下快速。
我有一个大文件要解析存储在 CDN 上。 每次我启动我的程序时,都会检查以控制 CDN 文件是否已更新。如果是这样,我需要检索此 CDN 文件中包含的更新信息。
目前的解决方案是在存储库中也有一个 CDN 文件的副本,并通过少量操作检查是否有更改:
- 在本地下载CDN文件
- 使用 ShellScript 测试本地文件和 CDN 文件是否不同
are_different_current_and_remote()
{
diff <(curl -s "") "" > /dev/null
if [ $? != 0 ]; then
return 0
else
return 1
fi
}
- 如果是,CDN文件替换本地文件
我发现这个过程效率不高,但我想知道哪种方法最好。
我想到了第二种方法。
- 使用此命令检索 CDN 中远程文件的校验和
curl -s http://remotefile|sha1sum
并将其存储在存储库中的文件中,以便下次检查是否存在差异 AKA 更新。
我也不是这个解决方案的忠实粉丝,但我认为这是一个改进,因为存储库中 space 更少。
您有更好的方法吗? 非常感谢。
获取校验和并与本地计算的版本进行比较将是最好的解决方案。在您使用 curl -s
的示例中,您仍然需要下载整个文件,然后在本地计算校验和。
我建议每次更新 CDN 中的文件并以某种方式将其与文件一起存储在 CDN 中时计算校验和。一些 CDN 提供商已经为您做到了。取决于您的 CDN 提供商的智能程度(一些示例):
将 SHA 校验和存储在额外的单独文件中,该文件逐渐变得比资产本身更小且下载速度更快(所以你会这样做
curl -s https://cdn/remotefile.sha1
)一些 CDN 提供商在每次上传文件时计算校验和,然后将其作为自定义
X-Checksum-Sha1
header 公开以响应 HTTPHEAD
请求(再次快速因为它不检索文件内容)。一些 CDN 提供商有单独的 REST API,允许存储和检索有关文件的元数据,您可以利用它来存储校验和、上次更新日期、版本标签或其他内容。
如果完整性检查是强制性的并且在使用软件之前是必要的,我建议在客户端也做类似的缓存,每次你获取新文件时计算校验和并存储它(例如在文件,注册表中......)所以启动是在不需要文件更新的情况下快速。