Я создал базу данных для iphone с использованием sqlite и оболочки fmdb.
База данных содержит примерно 3500 строк.Он имеет 14 столбцов: 1 для идентификатора, 1 для имени / основного поискового термина, 9 других столбцов для альтернативных поисковых терминов и 3 других столбца для кратких описаний.
Первое представление моего приложения - просто вводный экран, отображающийпанель поиска, немного похожая на Google.После реализации панели поиска вы попадете в другое представление, содержащее таблицу с желаемыми результатами.В этом начальном переходе между представлениями существует задержка в 1 или 2 секунды.Кроме того, таблица не допускает плавной прокрутки.Наконец, когда вы выбираете ячейку таблицы, она плавно переводит вас в окончательное представление, но при попытке вернуться к представлению таблицы возникает еще одна задержка в 1 или 2 секунды.
Я запустил это приложениес меньшей базой данных, которая имеет 3500 строк, но только 5 столбцов.В этом случае 9 альтернативных поисковых терминов удаляются из базы данных.Когда я запускаю такое приложение на iphone, оно довольно эффективно ... есть небольшая задержка, но на самом деле это не заметно ... Я бы, наверное, не заметил отставание, (я бы простоПредполагается, что небольшая задержка является нормальным явлением), если это не было так очевидно с большой базой данных, которую я использую.
Я пришел к выводу, что база данных sqlite нуждается в некоторой настройке, и поэтому у меняосновные вопросы.
- Я читал, что изменение параметров прагмы (например, синхронный, режим журнала, размер кэша) для базы данных sqlite повысит эффективность.Когда я изменяю эти настройки через плагин mozilla, они, похоже, не сохраняются ... Я открою и закрою плагин, и настройки вернутся к старым настройкам по умолчанию.Я видел, что вы можете установить их через xcode ... мне интересно, где в обертке FMDB установить эти настройки?
- Я слышал, что индексирование может значительно увеличить скорость.Хотя я не знаю, что индексировать, и если я что-то индексирую, нужно ли мне вносить изменения в кодировку оболочки FMDB?Кроме того, что я должен индексировать, учитывая, что в идеальной ситуации я хотел бы использовать все данные в моей базе данных (хотя некоторые столбцы я буду использовать иначе, чем другие)?
- (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath {статический NSString * CellIdentifier = @ "CustomCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
Data *data = [[[DataController instance]filterDataWithName:searchString:searchString:searchString:searchString:searchString:searchString:searchString:searchString:searchString:searchString]objectAtIndex:indexPath.row];
cell.textLabel.text = data.aDataName;
cell.detailTextLabel.text = data.aDataStatus;
// Configure the cell.
return cell;
}
-(NSMutableArray*)filterDataWithName:(NSString*)aDataName:(NSString*)altSearchTermA:(NSString*)altSearchTermB:(NSString*)altSearchTermC:(NSString*)altSearchTermD:(NSString*)altSearchTermE:(NSString*)altSearchTermF:(NSString*)altSearchTermG:(NSString*)altSearchTermH:(NSString*)altSearchTermI;
{
if ((aDataName && [aDataName length] > 0) && (altSearchTermA && [altSearchTermA length] > 0) && (altSearchTermB && [altSearchTermB length] > 0) && (altSearchTermC && [altSearchTermC length] > 0) && (altSearchTermD && [altSearchTermD length] > 0) && (altSearchTermE && [altSearchTermE length] > 0) && (altSearchTermF && [altSearchTermF length] > 0) && (altSearchTermG && [altSearchTermG length] > 0) && (altSearchTermH && [altSearchTermH length] > 0) && (altSearchTermI && [altSearchTermI length] > 0))
{
NSMutableArray *filterDataArray = [[NSMutableArray alloc]initWithArray:dataList];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(aDataName CONTAINS[cd] %@) OR (altSearchTermA CONTAINS[cd] %@) OR (altSearchTermB CONTAINS[cd] %@) OR (altSearchTermC CONTAINS[cd] %@) OR (altSearchTermD CONTAINS[cd] %@) OR (altSearchTermE CONTAINS[cd] %@) OR (altSearchTermF CONTAINS[cd] %@) OR (altSearchTermG CONTAINS[cd] %@) OR (altSearchTermH CONTAINS[cd] %@) OR (altSearchTermI CONTAINS[cd] %@)", aDataName, altSearchTermA,altSearchTermB,altSearchTermC,altSearchTermD,altSearchTermE,altSearchTermF,altSearchTermG,altSearchTermH,altSearchTermI];
[filterDataArray filterUsingPredicate:predicate];
return filterDataArray;
}
else
{
return dataList;
}
}