简易文件系统-用Go语言从零开始设计(一) 总体结构

14 篇文章 1 订阅

前言

闲来无事,帮写一个项目,经过几天的构思编码最终完成。其中有的设计不太合理,敬请见谅。


 

一、总体设计结构

      

最基本的结构,用户通过服务器来访问数据,实现了文件上传,新建文件夹,删除文件夹,共享文件,下载文件 功能。

一开始设想用户可以直接读取文件节点内容,但考虑到身份验证以及没有那么多公网ip服务器,因此直接靠服务器读取。并且文件节点直接的通信也靠服务器通信,这样服务器带宽压力极大,后期改造可以互相通信。

二、数据结构

1.目标

由于文件系统目标为尽可能节省空间、考虑文件的安全性。因此我们需要考虑到以下几个问题:

1.同文件多次上传,可能会占用许多容量。

2.同文件需要考虑到冗余,当一台文件节点掉线时,也可以正常读取。

结合以上问题设计了以下结构。

2.结构介绍

FileData顾名思义,就是理论上的文件。这个是一个数据结构上的概念,文件有自己的属性 名称  路径 大小 md5  虚拟文件id等

VirtualData 就是一个文件的虚拟化,一个VirtualData可以对应多个FileData,也就是多个相同文件可以指向一个VirtualData,这样就节省了存储空间。

Metadata 为元数据,及最终存储在Filenode中落地数据,多个metadata可以属于同一个virtualdata,但多个md5值相同的metadata必须分布在不同的FileNode中,否则其中一个FileNode宕机时就不可读取数据。

目前设计的数据库如下:

FileData

VirtualData

Metadata


总结

这章大概介绍基本结构,具体上传文件、下载文件、元数据分配下章继续。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值