作者回复: 对于数据完整性和校验的基本问题,可以去看「深入浅出计算机组成原理」里面的49和50两讲。 关于GFS我简单回单一下: GFS其实包括后面的BigTable这些数据都是用类似的方式来保障 Data Integrity。 * 把数据按照固定尺寸打包,比如GFS里就是64K大小一个包 * 针对这个包计算一个Checksum验证码,通常用CRC33 * 然后读的时候会校验,发现数据和校验码不一致,就认为Data Corrupted,然后从别的副本拿到正确的数据 这个事情chunkserver不需要任何额外信息,只需要本地的数据就好了,所以叫独立检查数据的完整性。
作者回复: 👍 这是一个合理的思路,就是在写的时候保障,并且通过元数据管理来做这个事情。这样的话,也能够分段并行写。
作者回复: 这份分组传输的方式的确是一个有效的办法
作者回复: 在读取数据的时候排序不是一个好办法,主要是电影这么大的数据肯定是流式传输获取,不太可能全都读过来排序。 不过分组组装的思路是没错的。
作者回复: 我没太理解你的问题。 数据本身会先分片,分片后,一个分片一定是小于一个block大小的。 在一个chunk肯定是空的一定写得下。但是的确如果所有文件都是略大约1/2 block大小,那么就会存在一半空间被浪费的情况。
作者回复: 不太一样,追加一次不是一定16MB,是最多16MB。实际存储还是连续的,比如你可以追加一条1KB的日志,不然空间利用也太浪费了。 的确,通过分组传输是一个常见的计算机领域的办法。