文件逻辑结构
文件逻辑结构
所谓”逻辑结构“,就是指在用户看来,文件内部的数据应该是如何组织起来的。而物理结构指的是在操作系统看来,文件的数据是如何存放在外存中的
无结构文件
按文件是否有结构分类,可以分为无结构文件,有结构文件两种
无结构文件:文件内部的数据就是一系列二进制流或字符流组成,又称为流式文件。如Windows操作系统中的.txt文件。
有结构文件
按文件是否有结构分类,可以分为无结构文件,有结构文件两种
有结构文件:由一组相似的记录组成,又称“记录式文件”。每条记录由若干个数据项组成。如数据表文件。一般来说,每条记录可作为关键字。
数据库表文件。一般来说,每条记录有一个数据项可作为关键字,根据各条记录的长度(占用的存储空间)是否相等,又可分为定长及记录和可变记录两种。
定长记录,每条记录的长度都相同。各项数据都处在记录中相同的位置,具有相同的顺序和长度
可变长记录组成:由于各个学生的特长存在很大区别,因此特长这个数据项的长度不确定,这就导致了各条记录的长度也不确定。当然,没有特长的学生甚至可以去掉特长数据项。
有结构文件的逻辑结构
顺序文件
文件中的记录一个接一个地顺序排列,记录可以是定长的可变长的。各个记录在物理上可以顺序存储或链式存储
根据记录与关键字之间的排序是否有关:(通常按照记录存入的时间决定记录的顺序)
串结构:记录之间的顺序与关键字无关
顺序结构:记录之间的顺序按关键字顺序排列
问题?能否快速找到第i个记录对应的地址?能否快速找到某个关键字对应的记录存放的位置?
可变长记录:需要显示地给出记录长度,可以计算出记录的长度内容等等。由于可变导航度,记录不会呈现出规律性。
定长记录:可实现随机存取,若能再保证记录的顺序结构,则可实现快速检索(即根据关键字快速找到对应记录)
索引文件
建立一张文件索引表以加快文件检索速度,每条记录对应一个索引。
文件中的这些记录在物理上也可以实现离散地存放
索引表本身是定长记录的顺序文件,因此可以快速找到第i个记录对应的索引项
可将关键字作为索引号内容,若按照关键字顺序排列,则还可以支持按照关键字折半查找。
每当要增加/删除·一个记录时。需要对索引表进行修改。由于索引文件有很快的检索速度,因此主要用于对信息处理的及时性要求比较高的场合。
另外,可以用不同的数据项建立等多个索引表,如:学生信息表中,可用关键字学号建立一张索引表
索引顺序文件
出现问题:每个记录对应一个索引表项,因此索引表可能会很大。比如文件的每条记录平均之占8B,而每个索引表项32个字节,那么索引表都要比文件内容本身大四倍,这样对存储空间的利用率就太低了。
索引顺序文件
索引文件和顺序文件思想的结合,索引顺序文件中,同样会为文件简历一张索引表,但不同的是:并不是每个记录对应一张索引表项。而是一组记录对应一个索引表项。
在本例中,学生按记录按照学生姓名的开头字母进行分组。每个分组就是一个顺序文件,分组内的记录不需要按照关键字排序。
效率加快
多级索引顺序文件:
为了进一步提高检索效率,可以为顺序文件建立多级索引表。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?