一、基础概念补充:
- 文件系统存储:文件系统存储是一种传统的数据存储方式,以树状目录结构来组织数据。每个文件都有一个路径名,用户可以通过路径名访问文件。
- 文件存储的形式有:
NFS
- 文件存储的形式有:
- 对象存储:对象存储是一种非层次化的存储方式,它将数据作为独立的对象存储在扁平的命名空间中。每个对象包含数据、元数据和一个唯一的标识符(对象键)。对象存储不依赖于文件路径,而是通过对象键来访问数据。
- 对象存储:
ceph
- 对象存储:
二、为什么网盘业务选择对象存储而不选择文件系统进行存储?
- 基于文件系统进行存储会造成大量的数据冗余,以Linux用户为例,A用户和root用户的家目录并不相同,如果这两个用户都是10TB的“小视频”资源,则2个用户会单独占用2份存储空间;当用户的并发量达到上百万,千万甚至上亿级别就非常浪费存储空间,对于公司而言是一笔损耗
- 基于对象的一个好处是对于同一个文件始终只存储一份,尽管有上千个用户上传了同一个文件,无论该文件名称是否一致,但只要内容是同一个文件,则始终会上传一个文件,这也是为什么我们上传时能达到秒级上传到目的。其实采取的方式很多(如“md5Sum”等)
简单说:根据需求的选择ceph就会占队与对象存储
三、基于对象存储的原理是如何?
背景:网盘有文件的哈希值数据库
、用户表
、文件
、用户关系表
、用户存储容量表
、好友表
、用户分享资源表
原理如下:
- 客户端读取本地文件进行校验值并发送服务端
(1)当我们上传文件时,客户端程序会读取本地文件内容并计算该文件的哈希值/MD5,并将该值发送给服务端 - 服务端校验文件是否上传
(1)服务端接收到哈希值/MD5后,回去查询哈希值数据库,如果数据库有记录,说明该文件已存在,直接返回给客户端数据上传完毕提醒,这也是我们常见的秒级上传效果
(2)如果服务端发现客户端发送的哈希值不存在,也会开始上传文件,这意味着是第一次上传到该对象存储,等待时间会较长 - 更新用户信息的元数据
(1)如果用户上传后,系统会自动更新用户的存储目录的文件名称,也就是元数据更新