从磁盘读取大文件

时间:2015-03-27 14:53:26

标签: ios b-tree nsinputstream

我正在开发一个iOS应用程序,我有这个文本文件,每行都有一个城市名称。我在那个文件中有300万个城市。为了能够对其执行搜索和操作,我使用的是B树,但是这棵树需要很长时间才能创建。每次使用时间时,让他等待这种情况的用户体验并不好。所有这些都没有使用核心数据!

有关如何加快此过程的任何提示?

谢谢

3 个答案:

答案 0 :(得分:1)

我的建议是你使用带有索引的SQLite来查询你想查询的字段(或其他类型的永久索引存储),这样用户只需要在第一次打开应用程序时等待,然后你可以查询数据库,这将更快。我也非常确定您可以从预先生成的文件安装SQLite数据库,因此您可以离线生成此索引,将其与应用程序捆绑在一起,然后用户根本没有等待时间。我对这个选项并不是100%肯定,所以你应该调查。

无论哪种方式,这里都没有神奇的解决方案。如果您想要的数据在文件的200万行上,则必须读取200万行文本才能到达该行。我建议找到一种方法使应用程序的用户体验可以接受,以便用户在等待加载数据时感觉更好。如果在数据索引时显示某种带有进度条的漂亮屏幕,则用户将更加宽容这种等待。

答案 1 :(得分:0)

B-Tree显然需要一些时间才能创建。如果您不想使用数据库但坚持使用自己的B-Tree实现,则可以将树数据转储到单独的文件中,并在程序启动时加载,而不是每次都重新创建它。但是,每次修改源数据时都必须更新缓存的树。

在Python中,pickle模块可以为您提供帮助,但大多数编程语言都有序列化模块。

答案 2 :(得分:0)

此文件是否附带应用程序?如果是,那么您可以将文件文件处理到SQLite数据库中。在您发布包含数据库的应用程序之前。然后,您可以使用"选择"使用索引字段(如cityname)搜索数据的语句。

如果文件发生变化。然后仍然附带数据库,只是发送修改作为文件。哪个会编辑数据库以使其恢复到最新状态。您可能需要为每行添加一个命令,如REPLACE,NEW,DELETE。