我有一个通过HTTP运行并获取文件块(通常为10MB)的服务,并将它们作为块存储在远程文件系统上。这些块的组合将构成一个完整的文件。
我想从块中生成有关该文件的一些元数据。具体来说,我想生成文件的总文件大小和MD5校验和。
结束文件可能相对较大(500+ MBytes)。有没有办法以分布式方式迭代生成校验和?例如,假设我有两个Web服务器在负载均衡器后面运行此服务,该负载均衡器在两个服务器之间分配请求。是否可以使用类似共享Redis服务器的方式动态生成完整文件的MD5校验和?
我试图避免在磁盘上本地缓存块,或者在完全上载后查询远程数据存储中的实际文件内容。
答案 0 :(得分:3)
您可以使用Merkle Tree,like Cassandra。
执行此操作引用亚马逊的Dynamo第4.7节
为了更快地检测副本之间的不一致性并最大限度地减少传输的数据量,Dynamo使用Merkle树。 Merkle树是一个哈希树,其中叶子是各个键值的哈希值。树中较高的父节点是其各自子节点的哈希值。 Merkle树的主要优点是可以独立检查树的每个分支,而无需节点下载整个数据集。
答案 1 :(得分:0)
找到这个小宝石。它允许您使用数据库累计计算MD5总和。