Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 核心数据是否比自定义索引更高效;当您键入“时”;搜索?_Iphone_Cocoa Touch_Core Data - Fatal编程技术网

Iphone 核心数据是否比自定义索引更高效;当您键入“时”;搜索?

Iphone 核心数据是否比自定义索引更高效;当您键入“时”;搜索?,iphone,cocoa-touch,core-data,Iphone,Cocoa Touch,Core Data,实际上,我正在开发一个基于核心数据的iPhone应用程序。我有两个实体,每个实体包含超过200000行,在检索数据时遇到一些性能问题。对于每个获取请求,我必须等待1到2秒才能获得结果。 我正在考虑实现一个自定义搜索引擎来索引我的数据,但问题是整个数据库是可编辑的。内容可以随时更改,因此为动态内容数据库编制索引是愚蠢的 我想知道核心数据是否有足够的效率来提供即时搜索。在Apple文档中,千行实体被认为是小的。是这样吗 有没有人有办法提高核心数据的速度。。。?或者我应该实现自己的搜索引擎 目标是提供

实际上,我正在开发一个基于核心数据的iPhone应用程序。我有两个实体,每个实体包含超过200000行,在检索数据时遇到一些性能问题。对于每个获取请求,我必须等待1到2秒才能获得结果。 我正在考虑实现一个自定义搜索引擎来索引我的数据,但问题是整个数据库是可编辑的。内容可以随时更改,因此为动态内容数据库编制索引是愚蠢的

我想知道核心数据是否有足够的效率来提供即时搜索。在Apple文档中,千行实体被认为是小的。是这样吗

有没有人有办法提高核心数据的速度。。。?或者我应该实现自己的搜索引擎

目标是提供即时搜索,即键入mecanism时的搜索

[更新] 下面是我的一个获取请求的片段

NSString *predicateString = [NSString stringWithFormat:@"^(.*\\b)?%@(\\b.*)?$", searchString];
NSString *predicate = [NSString stringWithString:@"text MATCHES[cd] %@"];
NSArray *arguments = [NSArray arrayWithObjects:predicateString, nil];

NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease];
[fetchRequest setEntity:[NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:[[HYDataManager instance] managedObjectContext]]];
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:predicate argumentArray:arguments]];
[fetchRequest setSortDescriptors:[NSArray arrayWithObjects:[[NSSortDescriptor alloc] initWithKey:@"length" ascending:YES], [[NSSortDescriptor alloc] initWithKey:@"subEntity.attr1" ascending:YES], [[NSSortDescriptor alloc] initWithKey:@"subEntity.attr2" ascending:YES], nil]];
[fetchRequest setResultType:NSDictionaryResultType];
[fetchRequest setReturnsDistinctResults:YES];
[fetchRequest setPropertiesToFetch:[NSArray arrayWithObject:@"subEntity"]];

NSFetchedResultsController *controller = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:[[HYDataManager instance] managedObjectContext] sectionNameKeyPath:nil acheName:nil];

你可以尝试几种方法

1) 尝试使用setFetchBatchSize:减少应用程序中的工作数据集。与NSFetchedResultsController结合使用,这将根据需要透明地显示批,根据需要显示表上的对象

2) 验证是否可以将setResultType:与NSManagedObjectResultType一起使用。这将只返回匹配对象的ID;如果在执行提取请求后只需要访问其中的一个或几个,那么额外的开销确实很小,但提取速度要快得多。如果您需要访问所有返回的对象,那么这不是一种方法

3) 如果您需要检索存储在对象中的属性,请按照Hunter的建议使用setPropertiesToFetch:只检索您真正需要的属性

4) 如果模型包含实体的子实体,请验证是否可以使用setIncludesSubentities:将否作为参数传递

5) 如果不需要处理与获取请求关联的谓词匹配的所有对象,则使用setFetchLimit:检索固定数量的对象


希望这有帮助。

您是否尝试过标记数据模型中索引的所有可编辑元素?正如您所说,索引所有内容似乎很奇怪,但核心数据应该足够聪明,能够适当地处理这一问题。

您获取的数据是否超出了需要?我会仔细查看您的获取请求,只返回屏幕上显示内容所需的最小值。查看NSFetchRequest上的setPropertiesToFetch:以查看您是否能够将其缩减一点。另外,请确保您的模型已正确索引。请显示您的获取请求-在执行获取的方式上稍有不同会对性能产生很大影响。您可以查看上面我的获取请求!