Core data 核心数据,大文件,速度慢

Core data 核心数据,大文件,速度慢,core-data,filesize,Core Data,Filesize,我正在编写一个应用程序,它存储大量非常短的字符串(主要是一到三个unicode字符)和大量关系。这将导致以XML格式存储关系的巨大开销,而以二进制格式存储关系的开销更大(这很奇怪)。所以,如果我使用XML或二进制,我会得到巨大的文件和很长的保存和加载时间 SQLite格式更紧凑,保存速度更快(特别是在小更改的情况下),但出于某种原因,使用格式为“$somethinsbeginswith[c]fieldInMyObject”的谓词的查询无法工作,没有它们我也无能为力 除了直接使用SQLite之外,

我正在编写一个应用程序,它存储大量非常短的字符串(主要是一到三个unicode字符)和大量关系。这将导致以XML格式存储关系的巨大开销,而以二进制格式存储关系的开销更大(这很奇怪)。所以,如果我使用XML或二进制,我会得到巨大的文件和很长的保存和加载时间

SQLite格式更紧凑,保存速度更快(特别是在小更改的情况下),但出于某种原因,使用格式为“$somethinsbeginswith[c]fieldInMyObject”的谓词的查询无法工作,没有它们我也无能为力

除了直接使用SQLite之外,我还能做些什么来减少文件量、加快加载和保存速度吗

致以最良好的祝愿, 蒂莫菲

UPD 以下是保存数据的代码:


}

下面是加载数据的代码(用于创建新文件和加载现有文件):

-(无效)panelReturnedURL:(NSURL*)url{
NSManagedObjectModel*mom=[self-managedObjectModel];
persistentStoreCoordinator=[[NSPersistentStoreCoordinator alloc]
initWithManagedObjectModel:mom];
n错误*错误=nil;
如果(![persistentStoreCoordinator添加PersistentStoreWithType:NSBinaryStoreType
配置:无
URL:URL
选项:无
错误:&错误]){
[NSApp演示者错误:错误];
}
managedObjectContext=[[NSManagedObjectContext alloc]init];
[managedObjectContext setPersistentStoreCoordinator:persistentStoreCoordinator];
[主WinController窗口];
}


修改对象时不保存,应用程序退出或用户显式保存时保存上下文。

对于大型文件,XML和二进制文件的速度可能较慢,因为它们必须在一块内存中完全读取才能工作。如果您有大量数据,那么您确实需要使用SQLite存储


谓词的问题与SQLite存储无关。这种类型的谓词经常被使用。我建议发布一个单独的问题,其中包含您的实体布局和您想要使用的谓词:

XML并不以其速度著称,因此,如果您不需要人类可读的数据、运行时更改、可移植性等,您应该将重点放在二进制文件上。您使用什么技术来保存/加载数据?顺序存取还是随机存取?修改数据时,您会做什么?尽量详细说明,最好提供一些代码。我只是使用了由Xcode生成的“saveAction:”方法。。。我不认为还有其他的方法(我有点傻)。我会努力研究其他的可能性。 ‐ (IBAction) saveAction:(id)sender {

NSError *error = nil;

if (![[self managedObjectContext] commitEditing]) {
    NSLog(@"%@:%s unable to commit editing before saving", [self class], _cmd);
}

if (![[self managedObjectContext] save:&error]) {
    [[NSApplication sharedApplication] presentError:error];
}
- (void) panelReturnedURL:(NSURL *)url { NSManagedObjectModel *mom = [self managedObjectModel]; persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:mom]; NSError *error = nil; if (![persistentStoreCoordinator addPersistentStoreWithType: NSBinaryStoreType configuration:nil URL:url options:nil error:&error]) { [NSApp presentError:error]; } managedObjectContext = [[NSManagedObjectContext alloc] init]; [managedObjectContext setPersistentStoreCoordinator: persistentStoreCoordinator]; [mainWinController window]; }