Мы строим cv scoring service, и мы используем Postgres для того, чтобы создавать сложные запросы, чтобы найти лучшее, что соответствует вакансии. Проблема заключается в том, что мы используем действительно сложный набор эвристик для оценки cv до вакансии, а среднее число cvs, которое нужно забить за запрос, растет. Я хочу поставить такую нагрузку за пределы базы данных и искать существующие решения для горизонтального масштабирования такой нагрузки. Запрос должен выполняться на долю секунды, могут быть сотни одновременных запросов. Каждый запрос оценивается в среднем 10 тыс. Кв. Каждый cv похож на около 50 записей в, возможно, 10 таблицах в текущей реляционной форме.Горизонтальное масштабирование поискового запроса
Я хочу, чтобы кластерная система выполняла каждый запрос в нескольких параллельных процессах (на многих серверах) и возвращала агрегированный результат. Он должен быть быстрым и отказоустойчивым. Я искал Hadoop, но похоже, что он предназначен для пакетной обработки, а не для низкой нагрузки в режиме реального времени. Существует Apache Storm, но он предназначен для непрерывной обработки потока. Поэтому я не shure :)
Какой инструмент может удовлетворить мои потребности? Спасибо!
Thanks Björn! 1) Мы не переделываем работу, потому что cvs оцениваются в соответствии с вакансиями, которые почти всегда имеют разные требования. Мы должны каждый раз забивать каждый cv. 2) Разделение не поможет, потому что большую часть времени ВСЕ cvs забиты. Осколок обработки - это то, что я хочу. 3) У нас есть два кластера узлов, но однострочный запрос не распределяется между узлами в postgres ванили. 4) Я посмотрю на elasticsearch, спасибо! –
Похоже, это не то, что нам нужно. Elasticsearch построен поверх Lucene и является полнотекстовой поисковой системой. Мы не выполняем полнотекстовый поиск и даже не выполняем поиск. Мы применяем скоринг (cv, вакансии) ко всем cvs в базе данных и возвращаем лучшие совпадения. –
Elasticsearch делает гораздо больше, чем полнотекстовый поиск. –