2015-07-20 3 views
1

У меня есть база данных с 20 000 записей. Каждая запись имеет имя. Когда пользователь хочет просмотреть запись, он может посетить webapp и ввести имя записи во входном поле. При наборе текста результаты из базы данных будут показаны/отфильтрованы в соответствии с тем, что пользователь набрал. Я хотел бы знать основные архитектуры/понятия о том, как программировать этотУлучшить результаты поля поиска «поиск»?

Я использую следующий стек языка: во внешнем интерфейсе: html5/JavaScript (+ АЯКС делать мгновенные звонки в то время как пользователь печатает) бэкэнд: Java + JDBC для подключения к простой базе данных SQL

Моя первоначальная идея заключается в том:

  1. пользователь вводит текст
  2. Всякий раз, когда персонаж будет введен или удален в InputField, сделать запрос Аякса бэкэндом
  3. Бэкэнд делает LIKE% вход% запроса на поле имени в базе данных
  4. Все данные, найденные по запросу высылается в виде JSON строки в веб-интерфейсе
  5. Фронтэнд обрабатывает строку JSON и отображает то, что приводит его находит

Мои две проблемы: большое количество запросов ajax для обработки в сочетании с очень тяжелыми LIKE-запросами. Каковы способы его оптимизации? Поиск только для двух символов, которые они набирают/удаляют? Только запрос для первых десяти результатов?

Знаете ли вы сайты, использующие эти оптимизации?

ПРИМЕЧАНИЕ. Предположим, что записи - это лица, а имена - как имена реальных людей, поэтому некоторые имена более распространены, чем другие.

ответ

1

Вот возможные решения:

  • Поиск искомого префикса - префикс% LIKE может быть эффективно выполнен с использованием индекса типа BTREE.
  • Измерение производительности наивного решения LIKE '% str%' - это вы работаете над приложением B2B, база данных, скорее всего, загрузит эту таблицу в память и сделает запросы достаточно быстро.
  • Посмотрите документацию для вашей базы данных - там могут быть специальные функции для этого, как инвертированного индекса
  • как предложено @Stepan Новиков, загружать данные в памяти и поиск вручную
  • Использование специализированного поиска индексаторах как ГУМЗ или ElasticSearch (вероятно, overkill всего за 20 тыс. записей)
  • Если вы чувствуете ниндзя, внесите свой собственный индекс N-gram.
2

Вы можете выбрать SPA подход - загрузить все 20 000 имен/иды на сторону клиента, а затем отфильтровать его в памяти - это должно быть самым быстрым способом с минимальной нагрузкой на базу данных и фоновый