我想用c编写小型数据库,数据将存储在文件中,程序将读取和写入文件结构。我如何有效地创建这种程序?例如,一次从文件中读取一个结构将效率不高(导致对 hdd 进行多次读/写)。所以我需要将文件的一部分放到内存中操作数据然后将其写入文件(较少读取/写入硬盘),但是如果文件太大,这可能会导致问题,所以有一个新问题如何每次都会将大部分文件加载到内存中。
所以这是个大话题,但我正在寻找有效的方法,但同时也有一些简单的方法,我不是在寻找最大的效率。注意:对我来说简单的是一次一个结构。
谢谢。
我想用c编写小型数据库,数据将存储在文件中,程序将读取和写入文件结构。我如何有效地创建这种程序?例如,一次从文件中读取一个结构将效率不高(导致对 hdd 进行多次读/写)。所以我需要将文件的一部分放到内存中操作数据然后将其写入文件(较少读取/写入硬盘),但是如果文件太大,这可能会导致问题,所以有一个新问题如何每次都会将大部分文件加载到内存中。
所以这是个大话题,但我正在寻找有效的方法,但同时也有一些简单的方法,我不是在寻找最大的效率。注意:对我来说简单的是一次一个结构。
谢谢。
“一次从文件中读取一个结构将效率不高(导致许多读/写硬盘的原因)”
这是一个很大的假设,很可能是错误的。或者至少没有你想象的那么糟糕。
C 标准 I/O 库执行缓冲,您的操作系统也是如此。
从清晰的程序组织的角度,编写程序以方便的单元进行数据传输,并让缓冲完成聚合工作以提高效率。
即使该程序确实表现不佳,我也不会得出需要对其进行重大重组的结论。调整一些系统参数可能是要走的路。或者可能只是几行特定于平台的代码,以提示操作系统可以提高性能。例如,在 POSIX 平台上,看看您是否具有该功能fadvise
。(您可以使用该函数从FILE *
流中检索文件描述符。)fileno