2010-09-15 7 views
1

У меня есть много данных, которые хранятся локально (10000+ записи данных) (не принято решение о том, как все же - это часть вопроса)Реализация инкрементный поиск на Iphone

Как я могу осуществить инкрементный поиск по этим данным (на конкретное поле)?

Как настроить локальные данные?
XML? Plist? SQLite?

Должен ли я использовать основные данные для доступа?

ответ

0

Возможно, вы захотите использовать Core Data, и вы, безусловно, будете делать, если между записями есть какие-либо отношения. Без Core Data для управления отношениями сложность приложения может быть снежком.

Это распространенное неправильное представление о том, что поскольку Core Data автоматически обрабатывает много сложностей, неизбежно возникает неизбежная компромисс в производительности, так что, хотя Core Data может быть легко реализована, это должно быть самым медленным решением. Оказывается, это обычно не так из-за огромного количества настроек, которые Apple сделала под капотом. Довольно сложно написать решение, которое может наилучшим образом использовать Core Data для большинства случаев использования.

Я рекомендую вам начать с простейшего решения Core Data, а затем усложнитесь, только если вы протестируете простое решение и найдете его медленным. Я бы начал с грубой принудительной выборки и посмотрел, достаточно ли это. Следующий шаг должен состоять в том, чтобы делать выборки только на одном уровне сущности объекта, например. атрибут name объекта Person, затем извлекать всю сущность только при необходимости. Если это еще нужно замедлить, вам придется подумать о реализации какой-либо древовидной структуры в графе сущности (что не сложно).

Преждевременная оптимизация - это корень всего зла. Не пытайтесь принимать решения по оптимизации без данных, полученных при тестировании. Вы потратите больше времени в долгосрочной перспективе. Начните просто и добавьте сложность только тогда, когда это абсолютно необходимо.

1

10K записей не так уж плохо. Убедитесь, что вы задали размер партии извлечения. Например, если на iPhone, возможно, только 10 строк видны в любой момент времени, поэтому размер партии 10 имеет смысл. Также - и это абсолютно необходимо для достижения достойных скоростей - обязательно установите флажок «Индексированный» в «Инспекторе модели данных» для соответствующих полей в вашей базовой модели данных.

Если набор данных увеличивается, вы можете захотеть рассмотреть решение для любителей. См. "Directed acyclic word graph" в Википедии.

Если вы это сделаете, вы можете найти код реализации на Sourceforge. Это C++, но вы можете переименовать свой файл Objective C .m в .mm и включить любой код на C++.

Смежные вопросы