一、数据存储和文件
到目前的技术体系中,所有需要保存的数据,最终都是以文件的形式存储在硬盘上。那么如何组织这些数据的存储或者说文件的存储,就是一个最基本的问题。数据的存储和人类存储各种物品的方法是一样的,可以直接放到各种容器中,然后再用各种方法把这些容器联系起来,比如火车运输将一节节存储好的货物的车厢链接起来;也可以使用建立一排排的房间来存储粮食等等。还是那句话,计算机世界和现实世界是完全可以进行映射的。
二、文件的结构类型
所谓文件的结构就是如何组织和存储数据的方法,主要就是为了保证数据存储的安全性,方便管理文件并能够快速的进行文件的存储和检索。针对不同的应用层次和应用场景,比如操作系统和用户层或者其它的特定场景,文件的结构可能有不同的组织方式,这就是文件结构的类型。不过落实到最后的文件存储上,目前主流的文件结构类型主要包括以下几种:
- 连续文件结构
这种是最容易理解和实现的结构,就类似于一个大数组,不断的在后面加存储的数据块就可以了。这种类型的的结构,访问速度快,实现简单方便;缺点就是很难进行扩展,而且删除也不容易管理。 - 链式文件结构
类似于上层的链表结构,文件的数据块可以任意存放,只需要有一个指针指向它的位置并且它可以指向下一个数据块即可。优点就是文件可以方便简单的扩展,不会出现删除导致的碎片化问题;缺点就是随机访问差,同时指针会浪费一些空间,而且出现问题时,可能导致数据的大理损坏。 - 索引文件结构
其实索引就好象是链式的更高级应用,它为每一个文件创建一个专门的索引块,在其内部专门存储所有数据块的地址指针,这样就不会因为一个文件的索引出问题而导致数据大面积的丢失。在上层再抽象一个索引目录,这就是最基础的关系型数据库的管理方式。它的优点在于同时支持随机和直接访问,不会浪费空间;缺点就是索引块浪费了额外的空间,同时,如果文件的数据块很多,可能一级索引无法完成相关的索引需要多级索引,在效率和空间上都会降低效率。 - 直接文件结构
这种文件结构比较适合于较为稀疏的文件存储,可以通过某种算法如哈希可以直接跳到数据存储的位置。其优点就是搜索和查找的速度快,缺点就是空间需要大(处理算法的冲突如哈希计算的冲突),可能会有浪费。 - 树形文件结构
树开文件结构类似于数据结构中的树。从根节点到子节点再到叶子节点,将数据块组织起来。它的优点是数据隔离、逻辑清晰、分类明确同时易于扩展;缺点是树的操作比较复杂,而且如果树的层级过深会导致文件访问的效率大大降低。 - 图式文件结构
图式文件结构与数据结构中的图类似,可以互相访问节点,形成一个网络。优点是访问方便,不容易丢失数据;缺点是结构相当复杂并且不容易快速发现数据链路。 - 分布式文件结构
分布式文件结构看上去复杂,其实也好理解,如果大家把每个计算机当成一个网络节点,其实就类似于图式或网络文件结构。但由于应用的场景不同,它们间还是有区别的。分布式可以对同一文件进行分块存储并根据算法进行相关的组合处理。分布式文件结构的优点是安全,易于扩展;缺点是管理复杂、存储成本高。 - 对象式文件结构
对象式文件结构其实更类似于在上层应用的抽象,将一个个的具体的数据对象存储到文件中。优点便于组织和管理,可以更好的适应复杂的数据应用场景,符合人们的认知习惯;缺点是不太适应频繁的删除和修改且对小型数据文件不友好等等。
另外,针对目前存储芯片的发展,各种新型的固态内存不断的出现,那么为了更好的提供相适应的数据读写,就出现了很多有针对性的文件系统,这些都是未来发展的一个重要方向。也就是大家心心念念的“硬盘内存化”。所以说,各种技术在不断的向前发展,大家也不能固步自封,要不断的紧跟着学习和提高自己的技术水平。
其实在实际的应用上,可能不会单纯的使用一种文件结构类型,可以根据需要进行多种类型一起组织文件来进行数据存储,兄弟多了好打架嘛。
三、常见的文件系统和应用
在清楚了文件的结构类型后,还要明确文件的管理方式。大家常见的文件的管理方式都是直接管理即直接对相关的数据块进行相关的修改。另外还有一种间接管理方式,比如追加的文件管理方式,它不对原有的数据进行直接管理,而是直接追加到文件后面,然后通过一定的算法逻辑定时对数据进行处理(如合并、删除等), 如LevelDB这种KV数据库。(数据库的底层其实是也要转成文件,只不过内部可能有元数据等辅助文件)。
下面给大家简单列举一下常见的文件结构类型应用的文件系统:
- FAT32:基于文件分配表,可以认为是链式结构的增强。兼容性非常好(U盘、SD卡等),但无法支持大文件(>4GB)和高级权限管理。是Windows早期的系统文件格式。
- NTFS:Windows系统现在应用的主流文件系统。使用了类似索引的主文件表(MFT) 结构,支持大文件、日志(保证数据一致性)、压缩、加密和详细权限控制。
- ext4:类Linux系统的主流文件系统。采用多级索引(如直接、间接块等)来管理大文件,支持日志功能。
- APFS:Apple平台的文件系统,特点是为闪存/SSD进行了优化,采用写时复制(Copy-on-Write)和快照功能,效率特别高。
- 光盘记录的文件系统 ISO9660,专门光盘设计的,跨平台兼容。
四、总结
不管使用哪种文件类型,最终的目的都是高效的利用存储、快速的读写数据并方便快捷的进行数据的检索。当然实际情况不可能达到所有条件上最优,这就需要设计开发者根据实际情况做出取舍,从而在平衡各方的基础上达到整体的最优。

1633

被折叠的 条评论
为什么被折叠?



