c - 如何为文件系统实现B+树?

标签 c algorithm b-tree

我有一个文本文件,其中包含有关文件系统中所有文件的范围的一些信息,如下所示 C:\Program Files\abcd.txt 12345 100 23456 200 C:\Program Files\bcde.txt 56789 50 26746 300 ...

现在我有另一个二进制文件,它试图找出所有文件的范围。 现在,我正在使用线性搜索来查找上述文本文件中文件的范围信息。这是一个耗时的过程。有更好的编码方法吗?就像实现任何好的数据结构(如 BTree)一样。如果使用B+树,我需要使用的关键、分支因子是什么?

最佳答案

使用数据库。

在文件中实现树的关键点是具有固定的记录长度并使用文件偏移量而不是指针。

使用数据库。嗯,SQL Lite

文件需要考虑的另一点是,读取数据 block 比读取单个项目要快(无论硬盘是否有缓存或操作系统是否有缓存)。我实现了一个 B+Tree,它使用页面作为节点。

使用数据库。数据库已经编写并经过测试

更有效的设计是将初始节点保留在内存中。这减少了从文件中获取的次数。如果您的程序有空间,将前几个级别保留在内存中也可能会加快执行速度。

使用数据库。

我放弃了为我的应用程序编写 B 树实现,因为我想专注于程序的其他功能。我后来了解到,在现实世界(程序需要按计划完成的世界)中,时间应该花在应用程序的“核心”上,而不是已经编写和测试的附件上(也称为现成的)架子)。

关于c - 如何为文件系统实现B+树?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2605437/

相关文章:

algorithm - NP难?在线扑克合谋检测的算法复杂性?

database - 当元素大小不同时,如何保持 B 树不变量?

algorithm - 如何确定B树的顺序

c - 如果我只按 ENTER 键,在这样的 C 程序 [ getchar() ] 中会发生什么?

c - 在特定内存中定位c库函数

c - 使用 malloc.c 的堆分配内存边界

algorithm - 平衡的树和空间和时间的权衡

c - 如何在c中获取屏幕截图

java - 重复值插入排序,双向链表ADT

sql-server - 算法找到满足给定要求的最少数量的项目