会员登录 | 会员注册 | 意见建议 | 网站地图

站长资源综合门户

当前位置:首页 > 站长学院 > 建站经验 > Facebook图片存储架构的学习

Facebook图片存储架构的学习

时间:2012-04-30 18:32:00   作者:   来源:   点击:

haystack最前面的8K存储是被超等块占用。紧随超等块是针,每针组成的一个头部,数据和尾部:

一个针被他的元组标识,其中的偏移量为其在haystack存储的偏移。Haystack不在任何健值上做限制,即允许可以有重复键针。下图显示了索引文件的布局:

在haystack存储文件中有每针相应的的索引记实,并且包含针索引记实的顺序必须和haystack存储文件相关的针的顺序相匹配。依照规定索引文件的最低需求是找到一个特定的针在haystack存储文件的元数据。载入和组织索引记实到一个有效的查找数据布局是Haystack法度的责任。索引文件是不是很关头,因为如果需要它可以从haystack存储文件重建。索引的主要职责是让针元数据无需通过较年夜的Haystack存储文件,快速加载到内存中。原因是其可让索引编程原来存储的1%。

Haystack 写操作

Haystack 写操作同步将指针追加到 haystack 存储文件,当指针堆集到一定水平,就会生成索引写到索引文件。由于索引文件是不是很关头,为了能有更快的性能所以采取异步的体例进行写入。

为了下降硬件故障带来的损失,索引文件还会按期写到存储空间中。在解体或突然断电的情况下,将haystack恢复措置器存储中任何残破的针和截断haystack存储中最后一个有效的针。接下来,它会把丢失的针的索引记实 写到haystack文件的最后。

Haystack不允许重写现有的针偏移,如果一个针数据需要被重写,那么新版本必须使用相同的元组。应用法度会自动辩白出这两个相同的键,有最年夜偏移的便是最新的那一个。

Haystack 读操作

传到 haystack 读操作的参数包含指针的偏移量,健,备用键,Cookie 以及数据年夜小。Haystack为数据年夜小添加头部和尾部的长度,然后按照数据尺寸从文件中读取整个指针。读取操作成功的关头就是作为参数传递的健,备用键,Cookie是否匹配,数据是否通过了校验,并且针没有被删除失落。(见下文)

Haystack 删除操作

删除操作比较简单 – 只需要在Haystack 存储的指针字段中的"删除"位标识表记标帜一下便可。并且,相关的索引记实不会做任何的修改。是最终的应用法度引用到的是一个删除的针。像这样一个读取删除针的操作将会返回一个相应的毛病给应用法度。空间对已删除的针不做任何的收受领受,只有这样,才能使haystack 的空间很是的紧凑。(见下文)

照片存储办事器

照片存储办事器负责接管 HTTP 请求,并转换成相应的 Haystack 操作。为了尽可能削减办事器检索照片时的I/O操作,该办事器维护着全部 Haystack 中文件索引的缓存。办事器启动时,系统就会将这些索引读到缓存中。由于每个节点都有数百万张照片,必须包管索引的容量不会逾越办事器的物理内存。在内存中仅需要保存查找照片所需的少量元数据便可。

对用户上传的图片,系统分派一个64位的自力ID,照片接着被缩放成4种不合尺寸,每种尺寸的图像拥有相同的随机 Cookie 和64位的密钥,图片尺寸描述(年夜,中,小,缩略图)被存在代用key 中。接着上传办事器通知照片存储办事器将这些资料连同图片存储到 haystack 中。

每张图片的索引缓存包含以下数据:

由于谷歌的开源 sparse hash data 布局对每个条目只有2bit的开消,所以Haystack使用它来包管内存中的索引缓存尽可能小。

照片存 储的写/修改操作

写操作将照片数据写到 Haystack 存储并更新内存中的索引。如果该索引记实中包含了相同的键,那么这是一次对现有的照片进行修改的操作。并且只要修改索引记实中的偏移来反应新图像在haystack存储文件的位置。照片存储始终假定,如果有重复的图像(图像具有相同的键),有较年夜的偏移量的那个存储是有效的。

分享到:

网友评论

热门建站经验