Предварительно заселенный Три - PullRequest
4 голосов
/ 02 ноября 2011

Фон:
Моя группа CSS360 пытается создать приложение для Android, которое будет включать функцию автозаполнения поиска. Данные, которые мы будем искать, содержат около 7000 записей и будут храниться в базе данных SQLite на самом телефоне. Наиболее очевидный подход состоит в том, чтобы выполнить линейный поиск в базе данных после каждого символа, который вводит пользователь, а затем вернуть список предложений, которые являются потенциальными буквенными расширениями пользовательского запроса. Тем не менее, кажется, что это будет довольно неэффективно, и мы искали лучшие альтернативы. В другом из моих сегодняшних занятий мой инструктор кратко обсудил структуру данных три и упомянул, что она часто используется для хранения целых словарей. Записи в три могут быть получены в логарифмическом времени (в отличие от линейного времени для обычного старого массива), поэтому нам кажется, что это отличный инструмент для использования! К сожалению, мы уже над головой над этим проектом, и никто из нас не знает, как это сделать. Все, кого мы когда-либо кодировали на сегодняшний день, являются базовыми консольными приложениями, которые обучают нас основам программирования. Мы все пытаемся изучить платформу Android в течение недели, просматривая видео с YouTube, и отличаемся базой данных от одного парня из нашей группы, у которого есть опыт работы с SQL. Мы могли бы серьезно использовать некоторые указатели!

Вопросы:

  • Можно ли при создании дерева предварительно заполнить всю структуру? IE: сгенерировать строку кода для каждого используемого узла, чтобы вся структура уже была в памяти при запуске программы? Я думаю, что это избавит нас от необходимости восстанавливать всю базу данных из базы данных при каждом запуске программы. Если так, есть ли простой способ вставить эти тысячи строк кода в нашу программу? IE: Какой-то сценарий, который преобразует файлы базы данных в гигантский текстовый файл команд Java, который можно скопировать и вставить в Eclipse?
  • Будут ли значительные издержки, если мы будем искать в базе данных напрямую, вместо того, чтобы использовать какой-то внутренний список или структуру данных? Должны ли мы копировать имена из базы данных и искать их внутри программы для нашей функции автозаполнения?
  • Если это окажется слишком технически сложным для нас, и мы вынуждены прибегнуть к обычному линейному поиску, будет ли заметно снижена производительность?
  • Наши текущие планы заключаются в том, чтобы запускать функцию автозаполнения каждый раз, когда пользователь вводит символ, и затем ждать возврата функции, прежде чем позволить им продолжить ввод. Единственные программы, которые кто-либо из нас написал, пока работают синхронно. Что нам нужно знать, чтобы сделать эту функцию асинхронной? Учитывая наши способности новичка и требования, которые мы уже должны выполнить, это будет слишком технически сложным для нас?

1 Ответ

0 голосов
/ 21 декабря 2013

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

Если вы хотите выполнить поиск по подстроке, то полнотекстовый поиск , вероятно, будет лучшим выбором.

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

...