В настоящее время у меня есть одно приложение для мониторинга на производстве. Задачей этого монитора является сбор конкретных записей в социальных сетях, таких как facebook, twitter, youtube и т. Д.
Вот один простой пример вызова API из Twitter:
http://search.twitter.com/search?q=Stackoverflow&format=json
В принципе, это то, что делает система:
Мы закончили с двумя столами, один для пользователей, а другой для твитов.
ПРОБЛЕМА
После того как база данных MySql достигла 200 000 записей в таблице твитов (в первые месяцы), приложение, которое визуализирует эти данные, начинает потреблять слишком много ресурсов при выполнении запроса выбора в существующих твитах.
Зачем?
Система имеет разделенные учетные записи, каждая из которых имеет определенные условия поиска, связанные с их конкретным бизнесом. Когда мы выполняем выбор, нам нужно выбрать только те, которые связаны с условиями нашей учетной записи. Мы не можем видеть твиты, которые не связаны с нами. Но один твит может быть на многих счетах.
Фактический запрос (оскорбление моих глаз)
SELECT * FROM tweets WHERE content LIKE '%searchterm1%' OR LIKE '%searchterm2%' OR LIKE '%searchterm3%' OR LIKE '%searchterm4%' OR LIKE '%searchterm5%' OR LIKE '%searchterm6%' OR LIKE '%searchterm7%' OR LIKE '%searchterm8%' (and son on...)
Два возможных решения
a) Создайте таблицу tweets_searches, которая будет иметь два внешних ключа: tweet_id и search_id. Так что каждый твит в таблице твитов может быть связан с одним конкретным поисковым термином.
Поэтому вместо поиска определенной строки мы присоединяемся к этим таблицам.
b) Продолжайте поиск, но вместо этого, с полнотекстовым поиском, используя MATCH () AGAISNT ()
.
ГЛАВНЫЙ ВОПРОС
Достаточно ли этого, чтобы сократить потребление ресурсов, таких как процессор и оперативная память? Есть ли что-то лучшее, что я могу сделать?
Отказ от ответственности : это один из моих комментариев по этому вопросу, который может быть ответом:
Думаю, match ... against
здесь уместен. Это так называемый «полнотекстовый поиск». Для более сложных поисков я бы использовал Sphinx
– он индексирует вашу базу данных самостоятельно (имеет собственный механизм для нее) и выполняет поиск быстрее, чем MySQL