我有一个应用程序(目前用Python编写,因为我们解决了细节,但最终将用C编写),它使用存储在纯文本文件中的单个记录.我们无法使用数据库,需要定期手动添加新记录.
我的问题是:拥有一个文件(500k-1Mb)并让我的应用程序打开,循环,查找和关闭文件会更快吗?或者将记录分开并使用适当的约定进行命名会更快应用程序可以简单地循环遍历文件名以查找所需的数据?
我知道我的问题很一般,所以关于这个主题的任何好文章的方向都和建议一样受到赞赏.
丹,非常感谢你的时间
基本上你的第二种方法是索引 - 只是你在文件系统本身构建索引.这没有什么本质上的错误,只要你安排一些事情,这样你就不会在一个目录中获得太多的文件,它会很快.
您可以通过使用多级目录来实现"不要在一个目录中放置太多文件"目标 - 例如,具有密钥FOOBAR的记录可能存储在data/F/FO/FOOBAR而不是仅存储data/FOOBAR.
或者,您也可以通过构建索引文件来使单大文件执行,该文件包含(已排序的)键偏移对列表.如果你想要搜索与用于创建文件名的密钥不同的密钥,那么当目录为索引的方法失败时,如果你使用了索引文件,那么你可以为这种情况创建第二个索引.
您可能想重新考虑"我们不能使用数据库"限制,因为您实际上只是构建自己的数据库.
鉴于您的数据为 1 MB,我什至会考虑将其完全存储在内存中。
为了给您提供有关您的问题的一些线索,我认为拥有一个大文件意味着您的应用程序正在管理线路。拥有多个小文件依赖于系统和文件系统来管理数据。但后者可能会非常慢,因为它涉及所有操作的系统调用。