【发布时间】:2015-03-27 14:53:25
【问题描述】:
我正在开发一个 iOS 应用程序,我有这个文本文件,每行都有一个城市名称。我在那个文件中有大约 300 万个城市。为了能够对其执行搜索和操作,我使用了 B 树,但是创建此树需要很长时间。每次使用时间都让他等待这个对于用户体验来说是不好的。这一切都没有使用核心数据!
关于如何加快此过程的任何提示?
谢谢
【问题讨论】:
标签: ios b-tree nsinputstream
我正在开发一个 iOS 应用程序,我有这个文本文件,每行都有一个城市名称。我在那个文件中有大约 300 万个城市。为了能够对其执行搜索和操作,我使用了 B 树,但是创建此树需要很长时间。每次使用时间都让他等待这个对于用户体验来说是不好的。这一切都没有使用核心数据!
关于如何加快此过程的任何提示?
谢谢
【问题讨论】:
标签: ios b-tree nsinputstream
我的建议是,您使用 SQLite 对要查询的字段(或其他类型的永久索引存储)进行索引,这样用户只需在第一次打开应用程序时等待,然后您可以查询数据库,会快很多。我也相当确定您可以从预生成的文件安装 SQLite 数据库,因此您可以离线生成此索引,将其与您的应用程序捆绑在一起,然后用户根本没有等待时间。不过,我不能 100% 确定这个选项,所以你应该调查一下。
无论如何,这里没有神奇的解决方案。如果您想要的数据位于文件的 200 万行,则您必须阅读 200 万行文本才能到达该行。我建议找到一种方法来使您的应用程序的用户体验可接受,以便用户在等待数据加载时感觉更好。如果您在数据索引时显示某种带有进度条的漂亮屏幕,则用户将更加宽容这种等待。
【讨论】:
B-Tree 显然需要一些时间来创建。如果您不想使用数据库但坚持使用自己的 B-Tree 实现,则可以将树数据转储到单独的文件中,并在程序启动时加载该文件,而不是每次都重新创建它。但是,每次修改源数据时,您都必须更新缓存树。
在 Python 中,pickle 模块可以帮助您,但大多数编程语言都会有一个序列化模块。
【讨论】:
此文件是否随应用程序一起提供?如果是这样,那么您已经可以将文件文件处理到 SQLite 数据库中。在发布包含数据库的应用程序之前。然后,您可以使用“选择”语句使用索引字段(如城市名称)搜索数据。
如果文件更改。然后仍然附带一个数据库,只需将修改作为文件发送。这将编辑数据库以使其恢复最新。您可能需要为文件中的每一行添加一个命令,例如 REPLACE、NEW、DELETE。
【讨论】: