我有一个要解析的大文件存储在CDN上。每次启动程序时,都会检查CDN文件是否已更新。如果是这样,我需要检索此CDN文件中包含的更新信息。
当前解决方案是在存储库中也具有CDN文件的副本,并检查是否有少量操作就进行了更改:
are_different_current_and_remote()
{
diff <(curl -s "$2") "$1" > /dev/null
if [ $? != 0 ]; then
return 0
else
return 1
fi
}
我发现此过程效率不高,但是我想知道哪种方法最好。
我考虑了第二种方法。
curl -s http://remotefile|sha1sum
在CDN中检索远程文件的校验和,并将其存储在存储库中的文件中,以便下次检查它,以查看是否存在AKA更新差异。我也不是这个解决方案的忠实拥护者,但是由于存储库中的空间较少,我认为这是一种改进。
您看到更好的方法了吗?非常感谢。
获取校验和并与本地计算的版本进行比较将是最佳解决方案。在带有curl -s
的示例中,您仍然需要下载整个文件,然后在本地计算校验和。
我建议您在CDN中更新文件并将其与文件一起存储在CDN中时计算校验和。取决于您的CDN提供商的聪明程度(一些示例):
curl -s https://cdn/remotefile.sha1
,然后只是比较co)X-Checksum-Sha1
标头,以响应HTTP HEAD
请求(由于它不检索文件内容,因此速度很快)。如果在使用软件之前进行完整性检查是强制性和必要的,我建议也在客户端进行类似的缓存,并且每次获取新文件时都要计算校验和并将其存储(例如,存储在文件,注册表中...),因此在某些情况下可以快速启动当不需要文件更新时。