【发布时间】:2010-09-15 05:37:06
【问题描述】:
我在本地存储了大量数据(10000 多条数据记录)(尚未决定如何使用 - 这是问题的一部分)
如何对这些数据(特定字段)实施增量搜索?
我应该如何在本地设置数据?
XML?列表? sqlite?
我应该使用 Core Data 进行访问吗?
【问题讨论】:
标签: iphone cocoa-touch ipad core-data
我在本地存储了大量数据(10000 多条数据记录)(尚未决定如何使用 - 这是问题的一部分)
如何对这些数据(特定字段)实施增量搜索?
我应该如何在本地设置数据?
XML?列表? sqlite?
我应该使用 Core Data 进行访问吗?
【问题讨论】:
标签: iphone cocoa-touch ipad core-data
10K 记录还不错。确保您设置了获取批量大小。例如,如果在 iPhone 上任何时候可能只有 10 行可见,那么批量大小为 10 是有意义的。此外 - 这对于实现不错的速度绝对必要 - 请务必在数据模型检查器中为核心数据模型中的相应字段设置“索引”复选框。
如果数据集增加,那么您可能希望考虑一个更好的解决方案。请参阅维基百科上的"Directed acyclic word graph"。
如果你这样做,你可以在Sourceforge 上找到一些实现代码。它是 C++,但您可以将 Objective C .m 文件重命名为 .mm,并包含任何 C++ 代码。
【讨论】:
您可能想要使用 Core Data,如果记录之间存在任何类型的关系,您肯定会这样做。如果没有 Core Data 来管理关系,应用程序的复杂性会滚雪球。
一种常见的误解是,由于 Core Data 会自动处理大量复杂性,因此必须在性能上进行不可避免的权衡,尽管 Core Data 可能很容易实现,但它必须是最慢的解决方案。事实证明,情况通常并非如此,因为苹果在后台进行了大量调整。对于大多数用例来说,手写一个最适合 Core Data 的解决方案是相当困难的。
我建议您从最简单的 Core Data 解决方案开始,然后只有在您测试简单的解决方案并发现它运行缓慢时才变得更复杂。我会从蛮力获取开始,看看是否足够快。下一步将是仅对实体的单个属性进行获取,例如Person 实体的 name 属性,然后仅在需要时获取整个实体。如果这仍然很慢,您将不得不考虑在实体图中实现某种树结构(这并不难。)
过早的优化是万恶之源。不要试图在没有测试产生的数据的情况下做出优化决策。从长远来看,你会浪费更多的时间。从简单开始,仅在绝对必要时增加复杂性。
【讨论】: