CN103761328B - 基于单数据库和单文件的进程内虚拟文件系统 - Google Patents
基于单数据库和单文件的进程内虚拟文件系统 Download PDFInfo
- Publication number
- CN103761328B CN103761328B CN201410043938.1A CN201410043938A CN103761328B CN 103761328 B CN103761328 B CN 103761328B CN 201410043938 A CN201410043938 A CN 201410043938A CN 103761328 B CN103761328 B CN 103761328B
- Authority
- CN
- China
- Prior art keywords
- file
- primary
- virtual
- virtual file
- block
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/188—Virtual file systems
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于单数据库和单文件的进程内虚拟文件系统,基于单数据库和单文件的进程内虚拟文件系统建立在一原生操作系统上,应用于单个应用程序进程内部的一个或多个线程,原生操作系统提供一数据库、在数据库之外的一原生文件,以及原生系统接口层;数据库包括访问接口,原生文件包括读写接口;其中,数据库及访问接口存取虚拟文件的结构和数据块信息,原生文件及读写接口存取虚拟文件的数据内容;基于单数据库和单文件的进程内虚拟文件系统通过原生系统接口层调用访问接口以及读写接口,完成虚拟文件系统的功能。
Description
技术领域
本发明涉及计算机数据处理技术领域,特别涉及一种基于单数据库和单文件的进程内虚拟文件系统。
背景技术
文件系统的作用是实现二进制化数据的存储功能。目前的文件系统多种多样,最为常见的当属FAT/NTFS/EXT文件系统。不同的文件系统具有不同的优点和缺点,使用者可根据实际情况进行选择,或者在一个操作系统上设置多个文件系统。
然而,不同的操作系统使用的文件目录名称规则大不相同,大部分程序在不同的文件系统间移植时,需要协调不同操作系统的文件目录名称的差异才能正常使用,非常不便。更复杂的是各类模拟器程序,如虚拟机等,在解决原生操作系统文件目录差异的基础上,还需要为程序内部提供虚拟的目标文件系统支持。
发明内容
本发明针对现有技术存在的上述不足,提供了一种基于单数据库和单文件的进程内虚拟文件系统。本发明通过以下技术方案实现:
一种基于单数据库和单文件的进程内虚拟文件系统,基于单数据库和单文件的进程内虚拟文件系统建立在一原生操作系统上,应用于单个应用程序进程内部的一个或多个线程,原生操作系统提供一数据库、在数据库之外的一原生文件,以及原生系统接口层;
数据库包括访问接口,原生文件包括读写接口;
其中,数据库及访问接口存取虚拟文件的结构和数据块信息,原生文件及读写接口存取虚拟文件的数据内容;基于单数据库和单文件的进程内虚拟文件系统通过原生系统接口层调用访问接口以及读写接口,完成虚拟文件系统的功能。
较佳的,数据库中存取:
虚拟目录和文件信息表,用以存取虚拟文件和文件的结构信息;
虚拟文件数据块表,用以存取存储在原生文件中的虚拟文件的数据块位置;以及
原生文件的空白块表,用以存取原生文件中空白块的位置。
较佳的,虚拟目录和文件信息表包括至少六个字段:
所存储虚拟文件或目录的名称、名称的文件或目录的布尔标记、名称的唯一识别号、名称的父目录的唯一识别号、名称的创建时间,以及名称的最后修改时间。
较佳的,虚拟文件数据块表包括至少五个字段:
所存储虚拟文件的识别号、所存储的虚拟文件的数据块的块序号、所存储的数据块在原生文件中的起始位置、所存储的数据块在原生文件中的结束位置,以及数据块的实际使用量。
较佳的,原生文件的空白块表包括至少两个字段:
空白块在原生文件中的起始位置以及空白块在原生文件中的结束位置。
较佳的,原生文件的大小随所存储文件的增加而增加,在删除所存储的虚拟文件时仅修改数据库表,不减少原生文件的大小。
较佳的,在既修改数据库,又修改原生文件的情况下,使用数据库的事务提交功能,修改原生文件和数据库成功后,以提交数据库更改的结果作为是否成功操作的依据。
较佳的,接口层内部采用线程锁互斥,以支持多线程访问。
本发明所达到的技术效果在于:
1、虚拟出跨平台的文件系统:对应用程序而言,降低平台移植适配不同文件系统的难度;并且可以定制应用自己的虚拟文件系统名称规则。
2、该虚拟文件系统的实现方法不影响底层文件系统:只要原生操作系统中提供了数据库和文件的支持,那就可以实现。更进一步的,应用程序如果使用嵌入式数据库的话,那么只需要原生操作系统提供的文件访问接口。和原生操作系统的底层文件系统无关。对虚拟文件系统,也不需要了解其底层系统格式或驱动等,只需要知道其文件和目录的名称规则就可以虚拟。
附图说明
图1所示的是本发明的结构示意图。
具体实施方式
以下将结合本发明的附图,对本发明实施例中的技术方案进行清楚、完整的描述和讨论,显然,这里所描述的仅仅是本发明的一部分实例,并不是全部的实例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明的保护范围。
为了便于对本发明实施例的理解,下面将结合附图以具体实施例为例作进一步的解释说明,且各个实施例不构成对本发明实施例的限定。
请参考图1,本发明提供的一种基于单数据库和单文件的进程内虚拟文件系统,基于单数据库和单文件的进程内虚拟文件系统建立在一原生操作系统上,应用于单个应用程序进程内部的一个或多个线程,原生操作系统提供一数据库、在数据库之外的一原生文件,以及原生系统接口层;数据库包括访问接口,原生文件包括读写接口。数据库及访问接口存取虚拟文件的结构和数据块信息,原生文件及读写接口存取虚拟文件的数据内容。
数据库中存取三个表:虚拟目录和文件信息表,用以存取虚拟文件和文件的结构信息;虚拟文件数据块表,用以存取存储在原生文件中的虚拟文件的数据块位置;以及原生文件的空白块表,用以存取原生文件中空白块的位置。三个表的具体形式如下:
表一
表二
表三
虚拟目录和文件信息表包括至少六个字段:所存储虚拟文件或目录的名称、名称的文件或目录的布尔标记、名称的唯一识别号、名称的父目录的唯一识别号、名称的创建时间,以及名称的最后修改时间。
虚拟文件数据块表包括至少五个字段:所存储虚拟文件的识别号、所存储的虚拟文件的数据块的块序号、所存储的数据块在原生文件中的起始位置、所存储的数据块在原生文件中的结束位置,以及数据块的实际使用量。
原生文件的空白块表包括至少两个字段:空白块在原生文件中的起始位置以及空白块在原生文件中的结束位置。
原生文件的大小随所存储文件的增加而增加,在删除所存储的虚拟文件时仅修改数据库中三个表的对应信息,但不对原生文件进行操作,不减少原生文件的大小。如此做的目的有两个:一是只修改数据库,不动原生文件,这样效率高;二是对原生文件进行存入新内容时,只会在其末尾增长,不会在中间增加或减少,因此,对原生文件的控制也更简单。
在既修改数据库,又修改原生文件的情况下,使用数据库的事务提交功能,修改原生文件和数据库成功后,以提交数据库更改的结果作为是否成功操作的依据。事务提交功能为大多数数据库的常用功能,多个数据库修改,可以合并在一个事务中,最后调用事务提交。这里,先开始一个事务,然后修改数据库,然后修改原生文件,最后数据库一次提交,以防止数据库修改成功而原生文件修改出错的问题。
本发明提供的基于单数据库和单文件的进程内虚拟文件系统通过原生系统接口层调用访问接口以及读写接口,完成虚拟文件系统的功能。接口层内部采用线程锁互斥,以支持多线程访问。
以下举出几个操作实施例:
1、新增目录接口的实现是:
a)从根目录开始,逐层访问目录文件信息表,一直到父目录为止,没有则失败;
b)在表中查找父目录下是否有同名目录,有则失败;
c)向表中增加目标目录的记录,返回是否成功增加。
2、移动目录的接口实现是:
a)在目录文件信息表中逐层查找目录至旧目录,没有则失败;
b)在目录文件信息表中逐层查找目录至新目录的父目录,没有则失败;
c)在表中查找新目录的父目录下是否有同名目录,有则失败;
d)修改旧目录记录的名称,父目录识别号和最后修改时间,返回是否成功修改。
3、删除目录接口的实现是:
a)在目录文件信息表中逐层查找至目录,没有则失败;
b)在表中查找此目录的直接子目录和子文件记录集,有则失败;
c)删除目录记录,返回是否成功删除。
4、新增文件接口的实现是:
a)在目录文件信息表中逐层查找目录至文件的父目录,没有则失败;
b)在表中查找父目录下是否有同名文件,有则失败;
c)向目录文件信息表中增加文件记录,返回是否成功增加。
5、移动文件的接口实现是:
a)在目录文件信息表中逐层查找目录至旧文件的父目录,没有则失败;
b)在目录文件信息表中逐层查找目录至新文件的父目录,没有则失败;
c)在表中查找旧的父目录下是否有此文件记录,没有则失败;
d)在表中查找新的父目录下是否有同名文件,有则失败;
e)修改旧文件记录的名称,父目录识别号和最后修改时间,返回是否成功修改。
6、删除文件接口的实现是:
a)在目录文件信息表中逐层查找目录至文件的父目录,没有则成功;
b)在表中根据父目录识别号和文件名,找到文件记录,没有则成功;
c)根据b)的文件记录的识别号,将虚拟文件数据块表中的对应块记录,移动到原生文件空白块表中,并在前两张表中删除文件相关的记录,返回是否成功修改数据库。
7、打开文件接口的实现是:
a)在目录文件信息表中逐层查找目录至文件的父目录,没有则失败;
b)在表中根据父目录识别号和文件名,找到文件记录,将记录的文件识别号作为文件句柄返回。
8、关闭文件接口的实现是:
a)如果使用文件过程中有写入,则更新文件识别号对应记录的最后修改日期,并返回是否成功修改;
b)如果没有写入过,直接返回成功。
9、获取文件长度接口的实现是:
a)根据文件句柄,查找虚拟文件数据块表中对应的记录集,没有则返回0;
b)总和所有块中的有效长度,返回长度值。
10、读文件数据接口的实现是:
a)根据文件句柄,查找虚拟文件数据块表中对应的记录集,没有则失败;
b)检查需要读取的起始位置和长度,越界则失败;
c)找到下一开始读取的块记录,没有则失败;
d)如果c)的块大小大于等于需要读取的剩余长度,则从原生系统文件中读取剩余长度,返回是否读取成功;
e)如果c)的块大小小于需要读取的剩余长度,则先从原生系统文件中读取该块对应的数据,然后剩余长度减去块的大小,再重复步骤c)。
11、写文件数据接口的实现是:
a)根据文件句柄,查找虚拟文件数据块表中对应的记录集,没有记录且写入的起始位置不为0则失败;
b)检查需要写入的起始位置,越界则失败,文件原结尾不是越界;
c)寻找到下一写入的块;
d)如果c)未找到块,那么从原生文件空白块表中找第一个空白块;
e)如果d)未找到块,那么先向空白块表中添加一条记录,以原生文件结尾为起始位置,以剩余写入长度为大小计算出记录的结束位置,然后重复步骤d);
f)如果d)找到块时,那么检查空白块长度。
g)如果f)的空白块长度大于等于剩余写入长度,则向原生文件的该空白块处写入剩余数据,如果写入失败则返回失败,否则将该空白块记录合并到虚拟文件数据块表中,返回是否成功修改数据库;
h)如果f)的空白块长度小于写入长度,则向原生文件的该空白块处写入块大小的数据,并将该空白块记录合入虚拟文件数据块表,更新剩余数据长度后重复步骤d);
i)如果c)找到块,那么检查该块长度。
j)如果i)的块长度大于等于剩余写入长度,则向原生文件写入剩余数据,如果写入失败则返回失败,否则检查更新该块的实际使用量,返回是否成功修改数据库。
k)如果i)块长度小于剩余写入长度,则向原生文件写入剩余数据,检查更新该块的实际使用量,更新剩余数据长度后重复步骤c)。
12、查找子文件和子目录接口的实现是:
a)在目录文件信息表中逐层查找目录至目标目录,没有则失败;
b)根据目录的识别号,在表中查找直接子目录和直接文件记录集,返回记录集中的名称信息。
本发明可以运用在如下典型场景中:
1、跨平台中间件:可以为跨平台中间件提供完整的文件服务,隔离原生操作系统文件差别,而使用统一的自定义规范。
2、虚拟机或模拟器:为虚拟机或模拟器应用程序在文件系统移植方面降低难度,不必学习原生操作系统底层文件格式规范,就能轻松移植。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
Claims (6)
1.一种基于单数据库和单文件的进程内虚拟文件系统,其特征在于,所述基于单数据库和单文件的进程内虚拟文件系统建立在一原生操作系统上,应用于单个应用程序进程内部的一个或多个线程,所述原生操作系统提供一数据库、在所述数据库之外的一原生文件,以及原生系统接口层;
所述数据库包括访问接口,所述原生文件包括读写接口;
其中,所述数据库及所述访问接口存取虚拟文件的结构和数据块信息,所述原生文件及所述读写接口存取虚拟文件的数据内容;所述基于单数据库和单文件的进程内虚拟文件系统通过所述原生系统接口层调用所述访问接口以及读写接口,完成虚拟文件系统的功能,
所述原生文件的大小随所存储文件的增加而增加,在删除所存储的虚拟文件时仅修改数据库表,不减少所述原生文件的大小,
在既修改所述数据库,又修改所述原生文件的情况下,使用所述数据库的事务提交功能,修改原生文件和数据库成功后,以提交数据库更改的结果作为是否成功操作的依据。
2.根据权利要求1所述的基于单数据库和单文件的进程内虚拟文件系统,其特征在于,所述数据库中存取:
虚拟目录和文件信息表,用以存取虚拟文件和文件的结构信息;
虚拟文件数据块表,用以存取存储在所述原生文件中的虚拟文件的数据块位置;以及
原生文件的空白块表,用以存取所述原生文件中空白块的位置。
3.根据权利要求2所述的基于单数据库和单文件的进程内虚拟文件系统,其特征在于,所述虚拟目录和文件信息表包括至少六个字段:
所存储虚拟文件或目录的名称、所述名称的文件或目录的布尔标记、所述名称的唯一识别号、所述名称的父目录的唯一识别号、所述名称的创建时间,以及所述名称的最后修改时间。
4.根据权利要求2所述的基于单数据库和单文件的进程内虚拟文件系统,其特征在于,所述虚拟文件数据块表包括至少五个字段:
所存储虚拟文件的识别号、所存储的虚拟文件的数据块的块序号、所存储的数据块在原生文件中的起始位置、所存储的数据块在原生文件中的结束位置,以及所述数据块的实际使用量。
5.根据权利要求2所述的基于单数据库和单文件的进程内虚拟文件系统,其特征在于,所述原生文件的空白块表包括至少两个字段:
所述空白块在所述原生文件中的起始位置以及所述空白块在所述原生文件中的结束位置。
6.根据权利要求1所述的基于单数据库和单文件的进程内虚拟文件系统,其特征在于,所述接口层内部采用线程锁互斥,以支持多线程访问。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410043938.1A CN103761328B (zh) | 2014-01-29 | 2014-01-29 | 基于单数据库和单文件的进程内虚拟文件系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410043938.1A CN103761328B (zh) | 2014-01-29 | 2014-01-29 | 基于单数据库和单文件的进程内虚拟文件系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103761328A CN103761328A (zh) | 2014-04-30 |
CN103761328B true CN103761328B (zh) | 2017-02-15 |
Family
ID=50528564
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410043938.1A Active CN103761328B (zh) | 2014-01-29 | 2014-01-29 | 基于单数据库和单文件的进程内虚拟文件系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103761328B (zh) |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101082927B (zh) * | 2007-07-02 | 2010-05-26 | 浙江大学 | 一种基于上下文文件系统的文件服务方法 |
CN101187930B (zh) * | 2007-12-04 | 2010-06-09 | 浙江大学 | 分布式文件系统虚拟目录及命名空间的实现方法 |
US8578126B1 (en) * | 2009-10-29 | 2013-11-05 | Netapp, Inc. | Mapping of logical start addresses to physical start addresses in a system having misalignment between logical and physical data blocks |
CN101714167B (zh) * | 2009-11-03 | 2013-03-06 | 北京九合创胜网络科技有限公司 | 一种访问单文件数据库的方法及装置 |
US8548944B2 (en) * | 2010-07-15 | 2013-10-01 | Delphix Corp. | De-duplication based backup of file systems |
CN102682129A (zh) * | 2012-05-17 | 2012-09-19 | 北京像素软件科技股份有限公司 | 一种基于虚拟文件系统的数据读取方法 |
CN103116612B (zh) * | 2013-01-25 | 2015-12-02 | 南开大学 | 一种面向进程的虚拟文件系统的建立方法 |
-
2014
- 2014-01-29 CN CN201410043938.1A patent/CN103761328B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN103761328A (zh) | 2014-04-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110383261A (zh) | 用于多流存储装置的流选择 | |
CN110291518A (zh) | 合并树无用单元指标 | |
CN104182484B (zh) | 一种实现HBase数据与Java域对象映射的方法和装置 | |
CN103995854A (zh) | 一种设备跨版本升级方法和装置 | |
CN102243660A (zh) | 一种数据访问方法及设备 | |
CN105975502A (zh) | 一种基于cdc方式实现增量抽取数据的方法 | |
CN102930444A (zh) | 一种移动终端及其应用分类管理方法和系统 | |
CN106339450A (zh) | 一种树形数据的索引方法 | |
CN103795811A (zh) | 一种基于元数据保存存储信息及统计管理数据的方法 | |
CN102968373A (zh) | 一种测试系统的维护方法及装置 | |
CN106503158A (zh) | 数据同步方法及装置 | |
CN106155769A (zh) | 一种工作流处理方法、装置及工作流引擎 | |
CN102141926A (zh) | 一种应用程序管理方法、装置以及数字电视机顶盒 | |
CN100392651C (zh) | 一种实时内存数据库通用约束的实现方法 | |
CN104077385A (zh) | 一种文件的分类及检索方法 | |
CN105224527A (zh) | 适用于多种目的表更新方式的通用etl方法 | |
CN105912665A (zh) | 一种Neo4j向关系型数据库的模型转换和数据迁移方法 | |
CN105488471B (zh) | 一种字形识别方法及装置 | |
CN103593447B (zh) | 用于数据库表的数据处理方法和装置 | |
CN104125300B (zh) | 机卡分离型家庭网关业务配置数据的同步方法 | |
CN104408128B (zh) | 一种基于b+树异步更新索引的读优化方法 | |
CN105677805A (zh) | 一种利用protobuf的数据存储、读取方法及装置 | |
CN108089821A (zh) | 一种微控制器数据存储管理的方法 | |
CN105893068A (zh) | 一种智能设备的离线升级方法及装置 | |
CN103761328B (zh) | 基于单数据库和单文件的进程内虚拟文件系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |