c - 一个大文件还是多个小文件?

标签 c performance

我有一个应用程序(目前用 Python 编写,因为我们确定了细节,但最终它将用 C 编写)使用存储在纯文本文件中的个人记录。我们不能使用数据库,需要定期手动添加新记录。

我的问题是:拥有一个文件 (500k-1Mb) 并让我的应用程序打开、循环、查找和关闭文件会更快,还是将记录分开并使用一些命名会更快适当的约定,以便应用程序可以简单地遍历文件名以找到它需要的数据?

我知道我的问题很笼统,所以对有关该主题的任何好文章的指导与建议一样受到赞赏。

非常感谢您抽出时间, 丹

最佳答案

本质上,您的第二种方法是索引 - 只是您在文件系统本身中构建索引。这本身并没有什么问题,只要您安排好事情,使您不会在一个目录中获得太多文件,它就会非常快。

您可以通过使用多级目录来实现“不要在一个目录中放置太多文件”的目标——例如,键为 FOOBAR 的记录可能存储在 data/F/FO/FOOBAR 中 而不仅仅是 data/FOOBAR

或者,您可以通过构建一个包含(排序的)键偏移对列表的索引文件来使单个大文件的性能也一样。目录作为索引方法失败的地方是当你想搜索与你用来创建文件名的键不同的键时——如果你使用了一个索引文件,那么你可以为这种情况创建第二个索引。

您可能需要重新考虑“我们不能使用数据库”的限制,因为无论如何您实际上只是在构建自己的数据库。

关于c - 一个大文件还是多个小文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2560299/

相关文章:

c:了解变量的意外行为

c - 为C代码建立调用树

r - 在 R 中迭代多个条件时如何提高性能?

jQuery 在缓慢运行期间显示 "loading"

java - 使用私有(private)构造函数来防止类的实例化?

python - 将一个 int 转换为 pandas 中的多个 bool 列

python - 如何分析 Python 脚本?

c++ - cvSetImageROI 似乎不够快

c - MISRA C :2004, 移位错误

c - *p++ 在取消引用后会递增吗?