Полнотекстовый поиск с адаптивным хранением. Выход из банального тупика нехватки памяти
Написал Blogger team Опубликовано 23 июл, 2018
Теги #MySQL #PHP #Разработка

После запуска системы хранения документов прошло уже полтора года. И вот сюрприз - полнотекстовый поиск скачком перешел в состояние супер-медленного.

Небольшой комментарий, полнотекстовый поиск был реализован на основе mysql fulltext seaсh. Выбор на такое решение пал потому, что не хотелось усложнять систему избыточно. Но.... кто же мог подумать, что всем все так понравится, и все начнут класть в хранилище документы просто тоннами. И вот таблица доросла до 1ГБ. А innodb_buffer_pool_size - 1Гб. И вот - поиск по базе начинает занимать катастрофичное время. Так же надо учесть и то, что система на сервере с не самыми быстрыми HDD-дисками. 

Это тупик.... и  первый выход очевиден - увеличить innodb_buffer_pool_size. Но это на 1-2 года опять, и потом уже полная катастрофа!!!!

Что сходу пришло в голову:

1) проанализировал документы по объему текста, подавляющее большинство помещаются в поле типа TEXT, то есть можно поменять тип MEDIUMTEXT на TEXT - но это дало 15% экономии

2) чистить индексируемый текст от лишнего - это просто копейки экономии

3) оставить как есть - но это жутко медленно

В общем все это пришлось отмести. 

Через пару дней пришло отличное решение. Дело в том, что в моей базе (и думаю в таких подобных базах) подавляющее большинство используемых документов сосредоточено в 15-25 % документов общей массы, и по большому счету остальное никто никогда не ищет, или уж если ищет, то в лучшем случае по названию (полнотекстовые индексы по названию документов весят очень мало и таблица эта естественно тоже) или в конкретном месте, где сам и положил. И вот решение: индексировать новые документы  за последние три месяца или те, у которых есть статистика использования (такая статистика ведется в системе для ранжирования значимости результатов поиска). А это 35% процентов базы всего. И это почти постоянная величина, а старые документы из базы исключать. И - старые документы в поиске по прежнему доступны по названию и описанию. Итог -  вместо 1Гб получаем 350Мб, и без особого прироста. И .... поиск снова летает пулей.


Из этой всей истории вывод -  в связи с бешеными потоками данных в современных системах, будущее за адаптивными алгоритмами как поиска так и распределения ресурсов. И возможно....   в следующем десятилетии  ))) все будет окутано нейро-сетями и самообучающимися экосистемами. И это .... интересно...  Интересно как современная айти-сфера от точности вынужденно уходит в сферу вероятного....  И возможно... потом в сферу невероятного...). И в связи с этим решил, что пора рассмотреть возможность практического применения адаптивных алгоритмов в своей работе, видимо, это время действительно пришло... 

Блог вопросов и решений
Вопросы и решения всегда лежат прямо под ногами или летают над головой. Их надо ловить!
Последние посты
Популярное
Облако тегов
#Java #JavaScript #MySQL #PHP #Tesseract OCR #Zend framework #Разработка