前言
闲来无事,帮写一个项目,经过几天的构思编码最终完成。其中有的设计不太合理,敬请见谅。
一、总体设计结构
最基本的结构,用户通过服务器来访问数据,实现了文件上传,新建文件夹,删除文件夹,共享文件,下载文件 功能。
一开始设想用户可以直接读取文件节点内容,但考虑到身份验证以及没有那么多公网ip服务器,因此直接靠服务器读取。并且文件节点直接的通信也靠服务器通信,这样服务器带宽压力极大,后期改造可以互相通信。
二、数据结构
1.目标
由于文件系统目标为尽可能节省空间、考虑文件的安全性。因此我们需要考虑到以下几个问题:
1.同文件多次上传,可能会占用许多容量。
2.同文件需要考虑到冗余,当一台文件节点掉线时,也可以正常读取。
结合以上问题设计了以下结构。
2.结构介绍
FileData顾名思义,就是理论上的文件。这个是一个数据结构上的概念,文件有自己的属性 名称 路径 大小 md5 虚拟文件id等
VirtualData 就是一个文件的虚拟化,一个VirtualData可以对应多个FileData,也就是多个相同文件可以指向一个VirtualData,这样就节省了存储空间。
Metadata 为元数据,及最终存储在Filenode中落地数据,多个metadata可以属于同一个virtualdata,但多个md5值相同的metadata必须分布在不同的FileNode中,否则其中一个FileNode宕机时就不可读取数据。
目前设计的数据库如下:
FileData
VirtualData
Metadata
总结
这章大概介绍基本结构,具体上传文件、下载文件、元数据分配下章继续。