2015-11-28 2 views
0

У меня есть база данных продуктов с 3 миллионами записей. Я пишу webservice для запроса db. Вывод будет присвоен массиву в клиенте для сопоставления строк (аналогично тому, как вы начинаете вводить ipod в окне поиска Google). Любые предложения о том, как я могу оптимизировать запрос или кэшировать его таким образом, чтобы новый кеш создавался только при обновлении продукта. БД продукта будет обновляться каждую неделю новыми продуктами, что означает, что количество записей будет расти с течением времени.Laravel 5.1, запрашивающий базу данных с миллионами записей

+4

Как мы можем помочь, если даже не видим запрос? Вы просите нас настроить машину формулы 1, не показывая нам машину с ее спецификацией. – davejal

+0

Я бы не использовал БД для таких огромных записей. Вы попробовали что-то вроде ElasticSearch –

ответ

1

Если вам нужно найти по описанию продукта в любой части строки (запрос LIKE '% string%'), я бы рекомендовал хранить уникальные описания в другой таблице с помощью FULL TEXT INDEX, обновляя ее каждую неделю (при необходимости). Поэтому, когда пользователь начинает печатать, мы используем эту таблицу для вывода предложений.

Когда пользователь попадает в одно описание, мы ищем это описание в таблице продуктов ->, поэтому нам нужно добавить индекс INDEX в столбец описания в таблице продуктов.

Если вам нужно совместить только начальную фразу (запрос LIKE 'string%'), вы можете просто поместить индекс INDEX в столбец описания продукта.

+0

Сэм, разве полный индекс все равно не вызвал бы загрузку сервера? – singh

+0

@ JotiBasi ему нужен бенчмаркинг и зависит от размера данных, оборудования и нагрузки. Если ваш mysql кэширует запросы, он может быть медленным в начале, в то время как в кеше ничего нет. Если вы можете разрешить некоторую задержку для события нажатия клавиши, значит, на каждом нажатом ключе не будет запроса, и вы не будете получать огромное количество запросов каждую секунду, тогда это будет совершенно нормально –

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