iphone SDK sqlite производительность поиска для + 40K записей - PullRequest
4 голосов
/ 26 марта 2009

Эй, ребята, я хотел бы узнать, как лучше всего это сделать:

У меня есть огромная таблица с + 40k записей (заголовки ТВ-шоу) в sqlite, и я хочу сделать поиск в этой таблице в режиме реального времени. например, если пользователь ищет шоу, а когда пользователь вводит условия поиска, я читаю sqlite и фильтрую записи после каждого нажатия клавиши (например, предложение поиска Google)

мой тест производительности составляет 100 миллисекунд. Несколько вещей, о которых я подумал: создание индексов, разбивка данных на несколько таблиц.

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

заранее спасибо

Ответы [ 4 ]

5 голосов
/ 26 марта 2009

Чем заняться:

  1. Индексировать поля соответствующим образом.
  2. Ограничьте себя только 10-15 записями в начальном запросе - этого должно быть достаточно для заполнения верхней части табличного представления.
  3. Если вам не нужно сортировать, не надо. Если вам нужно отсортировать, сортируйте по проиндексированному полю.
  4. Делайте как можно больше в SQLite, а не в своем собственном коде.
  5. Делайте как можно меньше.

Вы, скорее всего, найдете то, что у меня есть: SQLite и iPhone действительно удивительно способны, если вы не делаете ничего действительно глупого.

2 голосов
/ 26 марта 2009

Помните о «воспринимаемой производительности» - выполнение поиска сразу после нажатия клавиши может быть несколько дорогостоящим. Сколько миллисекунд требуется пользователю, чтобы нажать клавишу? Вы, вероятно, можете избежать обновления списка результатов, пока пользователь не наберет ничего в течение нескольких сотен миллисекунд. (Для действительно быстрых пользователей, возможно, обновляйте каждые сто сотен миллисекунд, пока он еще печатает).

1 голос
/ 27 марта 2009

Как вы знаете, производительность будет плохой? 40 тысяч строк - это не так уж много, даже для iPhone ... попробуйте на телефоне перед оптимизацией.

0 голосов
/ 26 марта 2009

Избегайте каких-либо объединений, попробуйте использовать подкачку, чтобы сохранить минимальный объем возвращаемых данных. Возможно, вам следует попытаться загрузить все это в память, а затем отсортировать и выполнить бинарный поиск? Если бы это был просто список названий шоу, он бы подошел?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...