哈希表在淘宝分布式文件系统的应用
淘宝分布式文件系统
项目背景介绍
根据淘宝 2016 年的数据分析,淘宝卖家已经达到 900 多万,有上十亿的商品。每一个商品有包括 大量的图片和文字(平均:15k),粗略估计下,数据所占的存储空间在 1PB 以上,如果使用单块容 量为 1T 容量的磁盘来保存数据,那么也需要 1024 x 1024 块磁盘来保存
思考? 这么大的数据量,应该怎么保存呢?就保存在普通的单个文件中或单台服务器中吗?显然 是不可行的。 淘宝针对海量非结构化数据存储设计出了的一款分布式系统,叫 TFS,它构筑在普通的 Linux 机器集 群上,可为外部提供高可靠和高并发的存储访问。
设计思路
以 block 文件的形式存放数据文件(一般 64M 一个 block),以下简称为“块”,每个块都有唯一的一个 整数编号,块在使用之前所用到的存储空间都会预先分配和初始化。 每一个块由一个索引文件、一个主块文件和若干个扩展块组成,“小文件”主要存放在主块中,扩 展块主要用来存放溢出的数据。 每个索引文件存放对应的块信息和“小文件”索引信息,索引文件会在服务启动是映射(mmap)到 内存,以便极大的提高文件检索速度。“小文件”索引信息采用在索引文件中的数据结构哈希链表 来实现。 每个文件有对应的文件编号,文件编号从 1 开始编号,依次递增,同时作为哈希查找算法的 Key 来 定位“小文件”在主块和扩展块中的偏移量。文件编号+块编号按某种算法可得到“小文件”对应的文 件名。
哈希链表实现
键(key): 文件的编号 如, 1 、 5 、 19 。 。 。
值(value): 文件的索引信息(包含 文件大小、位置)
索引: 数组的下标(0,1,2,3,4) ,用以快速定位和检索数据
哈希桶: 保存索引的数组,数组成员为索引值相同的多个元素(以链表的形式链接)
哈希函数: 将文件编号映射到索引上,采用求余法 ,如: 文件编号 1
posted on 2022-11-12 15:48 会飞的鱼-blog 阅读(12) 评论(0) 编辑 收藏 举报 来源
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现