Основные данные, огромный файл, медленный - PullRequest
0 голосов
/ 22 марта 2011

Я пишу приложение, в котором хранится огромное количество очень коротких строк (в основном от одного до трех символов Юникода) и множество взаимосвязей.Это приводит к огромным накладным расходам на хранение отношений в формате XML и, тем более, в двоичном формате (что странно).Поэтому, если я использую XML или Binary, я получаю огромные файлы и очень долго сохраняю и загружаю время.

Формат SQLite более компактен и экономит быстрее (особенно в случае небольших изменений), но по какой-то причине запросыиспользование предикатов с форматом «$ Чем-то BEGINSWITH [c] fieldInMyObject» не работает, и я не могу обойтись без них.

Что я могу сделать, чтобы уменьшить объем файлов и ускорить загрузку и сохранение (кроме использования SQLite напрямую)?

С уважением, Тимофей.

UPD Вот код для сохранения данных:

<pre> &dash; (IBAction) saveAction:(id)sender {</p> <pre><code>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]; }</p> <p>

И я не сохраняю, когда объекты модифицируются, контекст сохраняется, когда приложениевыходит или когда пользователь явно сохраняет его.

1 Ответ

2 голосов
/ 22 марта 2011

XML и двоичные файлы могут быть медленными для больших файлов, потому что они должны быть полностью прочитаны в память за один кусок, чтобы работать. Если у вас много данных, вам действительно нужно использовать хранилище SQLite.

Ваши проблемы с предикатом не имеют ничего общего с хранилищем SQLite. Этот тип предиката используется обычно. Я бы предложил опубликовать отдельный вопрос с разметкой ваших сущностей и предикатом, который вы хотите использовать:

...