1

我有一个通过 HTTP 运行并获取文件块(通常为 10MB)并将它们作为块存储在远程文件系统上的服务。这些块的组合将构成一个完整的文件。

我想从块中生成一些关于文件的元数据。具体来说,我想生成文件的总文件大小和 MD5 校验和。

最终文件可能相对较大(500+ MBytes)。有没有办法以分布式方式迭代生成校验和?例如,假设我有两个 Web 服务器在负载平衡器后面运行此服务,该负载平衡器在两个服务器之间分配请求。是否可以使用共享 Redis 服务器等动态生成完整文件的 MD5 校验和?

我试图避免在磁盘上本地缓存块或在完全上传后查询远程数据存储以获取实际文件内容。

4

2 回答 2

3

您可以使用Merkle Tree来做到这一点,例如 Cassandra

引用亚马逊的 Dynamo 第 4.7 节,

为了更快地检测副本之间的不一致并最大限度地减少传输的数据量,Dynamo 使用了 Merkle 树。Merkle 树是一个哈希树,其中叶子是单个键值的哈希值。树中较高的父节点是它们各自子节点的哈希值。Merkle 树的主要优点是可以独立检查树的每个分支,而不需要节点下载整个 [...] 数据集。

于 2013-01-15T06:30:45.337 回答
0

发现了这个小宝石。它允许您使用数据库累积计算 MD5 和。

https://github.com/jarl-dk/digest_extensions

于 2013-01-15T19:49:35.977 回答