从硬盘文件中读取数据进行数据查询的效率问题

yueyebohe 2009-01-04 03:47:49
在硬盘中存放的文件,记录的数据是大约10万条,每条记录对应55个字段左右,为这个文件建立了索引,并且根据索引对当前文件进行查询操作,原来考虑的是先把索引的内容读入内存,进行查询,根据查询的结果回到硬盘文件中将相关记录取出送入到内存中。现在的问题是,如果要进行的是频繁的查询操作,这样子来回读取索引所消耗的时间,也会降低查询的效率。如果把所有的硬盘数据都读入内存,肯定是要耗内存,也会降低查询的效率,各位高手们给只个招,看看用哪种方法更合适一些。
怕我的问题没有叙述清楚,再分类来说一下,索引我是肯定要用的,而且在查找的过程中也都是使用的索引,上面我所提到的两种方法
方法1是先从硬盘的文件中读取索引到内存,进行查询,如果查询到,则根据当前查询到的索引中的值所记录的地址回到硬盘文件中读取其相关的信息;
方法2是把存入在硬盘中的文件一次性的读入内存,然后根据索引进行查找,直接根据索引中值的地址在文件中读取相应的信息

因为这个查询过程是需要频繁的进行查找,所以方法1可能因为索引需要不断的回到硬盘文件中来读取信息降低效率,方法2也许会因为把全部的文件都读入内存而占用太多的内存空间,
所以我不确定应该用哪一种方法好,当然如果有更好的方法则更好~
因为这个问题现在还处于设计阶段,没有写程序,所以对于两种方法所用的时间我还没有办法计算,请大侠们帮忙了~
...全文
219 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hmsuccess 2009-01-05
  • 打赏
  • 举报
回复
索引文件,使用b+树建立数据索引,帮助查询
  • 打赏
  • 举报
回复
像1楼说的,基本上看你的具体需求咯,前种方法肯定更费时,后面一种对内存需求大.
绿色夹克衫 2009-01-04
  • 打赏
  • 举报
回复
用流来做就可以呀,把索引全部读入内存(不会太大),文件用流的方式打开,根据索引中记录的位置,定位流的位置,读写应该不会太慢。
  • 打赏
  • 举报
回复
哪种方法更好取决于具体的需求:如果查询速度至关重要,内存浪费一些没关系,那么就用方法2;反之则使用方法1。

一般没必要将所有的数据全部加载到内存(尤其是在信息量比较大的情况下),只加载索引是个比较可取的折中办法。
可以将用于存放数据的硬盘文件规划得更合理一些,比如切成多个小文件分块存储,这样每次读取的时候只针对一个小文件进行处理就够了,效率上会更好一些。

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧