4.2.2 讨论
图片应用中有几个问题,第一个问题是图片去重,第二个问题是图片更新与删除。
由于用户可能上传大量相同的图片,因此,图片上传到TFS前,需要去重。一般在外部维护一套文件级别的去重系统(Dedup),采用MD5或者SHA1等Hash算法为图片文件计算指纹(FingerPrint)。图片写入TFS之前首先到去重系统中查找是否存在指纹,如果已经存在,基本可以认为是重复图片;图片写入TFS以后也需要将图片的指纹以及在TFS中的位置信息保存到去重系统中。去重是一个键值存储系统,淘宝内部使用5.2节中的Tair来进行图片去重。
图片的更新操作是在TFS中写入新图片,并在应用系统的数据库中保存新图片的位置,图片的删除操作仅仅在应用系统中将图片删除。图片在TFS中的位置是通过<Block id,Block offset>标识的,且Block偏移是在Block文件中的物理偏移,因此,每个Block中只要还有一个有效的图片文件就无法回收,也无法对Block文件进行重整。如果系统的更新和删除比较频繁,需要考虑磁盘空间的回收,这点会在Facebook Haystack系统中具体说明。