我有一个在 iOS 5.1.1 的 ipad 上运行的 coredata db。我的数据库中有大约 50,000 家公司。我在公司名称属性上创建了一个索引。我正在搜索此属性,有时会通过 fetchRequest 返回数千条记录。
当返回数千条记录时,可能需要几秒钟才能从获取中返回。这使得预先输入的搜索非常笨拙。
我预计将来会有更大的数据库。实现真正快速的搜索功能有哪些选择?
谢谢。
我有一个在 iOS 5.1.1 的 ipad 上运行的 coredata db。我的数据库中有大约 50,000 家公司。我在公司名称属性上创建了一个索引。我正在搜索此属性,有时会通过 fetchRequest 返回数千条记录。
当返回数千条记录时,可能需要几秒钟才能从获取中返回。这使得预先输入的搜索非常笨拙。
我预计将来会有更大的数据库。实现真正快速的搜索功能有哪些选择?
谢谢。
我建议观看最近几次 WWDC 的核心数据性能视频。他们经常谈论改善这种瓶颈的策略。视频中的一些建议:
searchString
代替在该字段上进行搜索。避免和通配符。<
<=
BEGINSWITH
MATCHES
NSFetchRequest
usingfetchLimit
和fetchBatchSize
一些指向几个视频的指针(还有其他年份的更多视频):
WWDC 2012:第 214 场会议 - 核心数据最佳实践:45:00
WWDC 2010:第 137 场会议 - 优化 iPhone OS 上的核心数据性能:34:00
虽然 Core Data 在许多情况下是正确的工具,但无论如何它都不是灵丹妙药。
查看这篇文章,其中讨论了一些优化策略以及 SQL 数据库是您更好选择而不是 Core Data 的情况:
http://inessential.com/2010/02/26/on_switching_away_from_core_data
老实说,在这种情况下,使用 SQL 数据库而不是 Core Data 可能会更好,因为当您尝试访问 Core Data 实体上的属性值时,通常会导致错误并将对象拉入活动内存......这肯定有性能和速度成本。使用真正的数据库 - Core Data 不是真正的数据库,请参阅http://cocoawithlove.com/2010/02/differences-between-core-data-and.html - 您可以查询数据库而无需从中创建对象。