2013-03-06 2 views
0

У меня есть несколько таблиц в моей базе данных, для которых потребуется огромное количество соединений для связанных запросов, и таблицы будут часто обновляться. Существуют различные вопросы, которые я хочу задать, связанные с переходом из поиска mysql в поиск sphinx.Sphinx или mysql на соединенных таблицах

Я пытаюсь использовать Sphinx для выполнения запросов (а не для полных текстовых запросов), поскольку механизм mysql слишком медленный из-за большого количества подключений.

Итак, мой первый вопрос заключается в том, имеет ли смысл использовать sphinx для не-полнотекстового поиска, преобразовывая поля в текст посредством конкатенации?

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

  1. Поскольку Sphinx не имеет СОЕДИНЕНИЙ, де-нормализовать все таблицы в одну таблицу (или просмотреть), а затем запустить индекс индекса sphinx. Это, по-видимому, самый неэффективный способ, так как это приведет к миллиардам строк, а также к другим запросам, которые не связаны с объединением всех таблиц, будет серьезно затруднено.
  2. Создайте индекс sphinx по каждой из таблиц отдельно. Но это не позволило бы мне использовать эти индексы для запроса, требующего объединения между таблицами. Чтобы преодолеть это, используйте sql_joined_field для столбцов, которые нужно объединить, и sphinx выполнит процесс объединения.
  3. Поместите JOIN в sql_query, которая строит индекс. Таблицы остаются нормализованными, но вы де-нормализуете при построении индекса. Это кажется хорошим решением. Но в родительских таблицах будет много обновлений/удаления/вставки. Так будет сложным или утомительным делом, чтобы обновить индексы спинкса соответственно и будет ли это препятствовать производительности в долгосрочной перспективе после слишком большого количества обновлений? Как можно следить за обновлениями в родительских таблицах и эффективно изменять индексы sphinx.

Я хотел бы знать, что является лучшим способом для решения проблемы. Извините за длинный вопрос, но я хотел объединить свои исследования, чтобы одно и то же не повторялось в ответах на последующие.

ответ

0

Да, я бы рекомендовал 3.

Читайте об основных + дельте обновлениях способа получить обновления быстро индексироваться (без необходимости перестраивать весь индекс)

http://sphinxsearch.com/docs/current.html#delta-updates

+0

Спасибо за ваше предложение , У меня есть сомнения. Из того, что кажется, по-видимому, дельта-обновления выглядят для индекса, полученного из одной таблицы, а не для производного от объединений по нескольким таблицам. Можно ли использовать технику для той проблемы, с которой я имею дело? – Legolas

+0

Да, не причина, почему нет. Я использую дельта-индексирование с объединением через 4 таблицы. «Фильтр», использующий таблицу счетчиков, должен (не должен) фильтровать первую таблицу в списке, но он может просто присоединиться к другим таблицам. – barryhunter

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