虚拟文件系统初步设计

虚拟文件系统初步设计

 

一、背景和说明

为了对对象的存储、访问、组织和查找进行集中统一管理,特提出虚拟文件系统的初步构思和设计。

文件系统是指文件命名、存储和组织的总体结构。虚拟文件系统则是针对各种文件系统所做的虚拟抽象存取层,综合考虑了业务文件系统(BizFileSystem)组织机构文件系统(OrgFileSystem)、本地文件系统(LocalFileSystem)等各种文件系统的异同,对相同的部分作了抽取,封装为统一的存取接口;对相异的部分作了抽象和虚拟,将这些部分声明为虚拟方法,再由相应的文件系统去做具体的实现。例如创建文件、文件的搜索、复制、移动、删除等这些操作。根据存储方式和储存介质的不同,划分为组织机构文件系统、本地文件系统等几种,不同的文件系统,存储方式也不一样。

 

二、使用虚拟文件系统存储对象的优势与劣势

1.       优势

l         对象存储集中

l         对象处理和访问方式统一

l         对象组织方式灵活

l         查找对象方便快捷

l         便于后续组织机构表达式、及系统部署方面的设计和开发工作

 

2.       劣势

l         大文件(百兆以上)的处理速度不太理想、可能造成假死现象(对此问题或许可以考虑采取分段、分块存取,表现上显示进度条的方式解决;另外还可以考虑提供选项,允许将文件内容统一保存到服务器的某个目录下,依赖Windows的能力提高对大文件的处理能力)。

 

三、系统层次结构设计

整体设计思路是:基于大型数据库、以 SQL语言为最终实现手段,在对象和数据库之间,封装一层虚拟文件系统层。所有对象以文件的形式、通过虚拟文件系统层统一进行存取访问操作。

虚拟文件系统层公布了统一存取文件的访问接口,在它的基础之上实现的各种文件系统,都遵循它的接口规范,这些接口的使用方法和Windows文件系统接口的使用方法大致相同。预计,首先基于虚拟文件系统实现的文件系统有:组织机构文件系统和本地文件系统它们和虚拟文件系统的关系以及存取内容的关系如下图。

 

 虚拟文件系统分层设计图

 

 

1.       设计思想

以适配器模式为核心

 

2.       数据库文件系统(DBFileSys)的表结构

以数据库为存储介质的文件系统,存储上由以下四个表构成:

 

1.          TFILESYSTEM(文件系统表)

11  文件系统表

字段显示名称

字段ID

数据类型

是否主键

字段说明

GUID

FGUID

字符

全局唯一标示字符串GUID

GUID

FPARENTGUID

字符

 

父节点的GUID

文件名

FFILENAME

字符

 

主要文件名+扩展名

主要文件名

FID

字符

 

标示ID

扩展名

FKIND

字符

 

扩展名表示了类型

路径

FPATH

字符

 

所在路径。末尾带路径分隔符“/

删除版本号

FDELETELEVEL

整数

 

逻辑删除标示:为0表示没有被逻辑删除;>=1表示已经被逻辑删除。回收站功能依此实现。

显示名称

FDISPLAYNAME

字符

 

 

顺序

FSEQUENCE

整数

 

在同一级别文件中的显示顺序

文件标记

FFLAG

字符

 

16字节长度的字符串, 1..8个保留给通用的文件系统层, 9..16可自定义,1位:用'1'标记是目录;

 

文件系统表的索引

索引名

索引唯一

索引字段

说明

UFN

FPathFIDFKindFDELETELEVEL

 

PGUID

FParentGUID

 

 

 

2.          TFILEATTRIBUTE(文件属性表)

1.2  文件属性表

字段显示名称

字段ID

数据类型

是否主键

字段说明

GUID

FGUID

字符

全局唯一标示字符串GUID

ID

FID

字符

属性ID

FVALUE

字符

属性值

 

3.          TFILECONTENT(文件内容表)

1.3  文件内容表

字段显示名称

字段ID

数据类型

是否主键

字段说明

GUID

FGUID

字符

全局唯一标示字符串GUID

内容

FCONTENT

二进制流

 

文件内容的二进制流表示

 

4.          TFILEINDEX(文件索引表)

1.4  文件索引表

字段显示名称

字段ID

数据类型

是否主键

字段说明

GUID

FGUID

字符

全局唯一标示字符串GUID

ID

FID

字符

索引类别ID

FVALUE

字符

索引值

 

四、核心类设计(详细内容请参见VirtualFileSys.mdl文件)

1.       VirtualFileSystem

2.       VirtualFileSystemAdapter

3.       CommonFileSystemAdapter

4.       DBFileSystemAdapter

5.       BizFileSystemAdapter

6.       OrgFileSystemAdapter

7.       LocalFileSystemAdapter

 

说明:文件名处理过程中,不区分大小写。

 

五、可能会碰到的问题

1.       如果考虑支持多种大型数据库的话,在具体实现过程中, SQL语句上可能会遇到困难(例如“重命名”操作时维护所有相关文件的SQL语句)。

2.       原来的实现基于Delphi,现在改为.Net上实现,需要一段时间熟悉.Net平台,然后才能更好的进行实现。

 

六、其他

抽取虚拟文件系统接口层时,尽量考虑全面、兼顾通用型,使之在.Net平台上,能够满足以大型数据库作为存储介质、和Windows文件系统存取访问方式类似的各种需要。甚至如果需要的话、还能够让虚拟文件系统作为一个独立产品、以组件的方式出售,例如:开发企业信息管理系统中的文档管理模块时,借助虚拟文件系统能够使文档管理更统一、方便和快速。

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Delphi编写的虚拟硬盘文件浏览程序,这段代码只实现了很小的功能,对分区格式有限制,只能读取不能写入,只能读取C盘根目录下的文件.等等.代码里符带一份学习笔记,是Fat分区格式的,不是太详细,到数据恢复网可以找到详细的资料.   使用Virtual PC的时候,刚开始时对于VPC和宿主之间的文件传输却一直没有整明白,所以要从宿主计算机中传输文件到VPC中只能靠WinIso制作成iso文件再用VPC的光驱来读取,这样做很麻烦,而且只是一面传输,所以就看一下VPC的虚拟硬盘,一看之下和记忆中的硬盘格式差不多,我只记得有个"55 AA",不巧的是在这里也找到了这个数据.所以就想做一个读取虚拟磁盘的软件.    于是去网上找了一些看了下:    首先是硬盘的主引导扇区,固定值:0磁面0磁道1扇区.大小512字节,记得前几天看过<>--一本不错的书,它那上面的第一个程序便是写了一个引导程序.它便是写了程序所需要的功能后将其它地方填0以达到512字节.当然最后两个字节一定是"55 AA",只有这个值才是有效的.    但是,上面所提那个引导程序显然是不合理的(书中只是一个软件盘引导可以不涉及到分区信息).因为真正的引导程序只能是占用此扇区的前446个字节,而后面直到最后"55 AA"之前的64个字节,是用来记录分区信息的DPT(Disk PartitionTable).但是作为在虚拟机上或软盘上的演示似乎也无妨(硬盘肯定不行,会破坏整个系统分区).    由于只是为了VPC与宿主计算机交换数据,所以我决定只读取第一分区就可以了.首先准备一个新VPC虚拟硬盘,用VPC建一个最小的3M硬盘(这一点是Virtual PC比VMWare强的),分区(全做为C盘),格式化,由于硬盘很小,所以只能格式化成Fat12,这里只学习了Fat12和Fat16的分区格式,然后用UltraEdit打开:    果然,510字节后便是"55 AA"即行标"0x01f0h"最后两字节,再看一下前面行标"0x1B0h"最后两字节是"80 01"80便是表示此分区为活动分区,即从此开始为第一个分区的信息.前面正好446字节.    每一个分区由十六个字节来描述.第一字节只能为"80"或"00",我们先不关心这些字节,只关心最后四个字节--分区所占扇区数.和最后第八字节开始的四个字节--相对扇区数,即此分区之前还有多少扇区.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值