2015-05-15 4 views
1

Мы строим cv scoring service, и мы используем Postgres для того, чтобы создавать сложные запросы, чтобы найти лучшее, что соответствует вакансии. Проблема заключается в том, что мы используем действительно сложный набор эвристик для оценки cv до вакансии, а среднее число cvs, которое нужно забить за запрос, растет. Я хочу поставить такую ​​нагрузку за пределы базы данных и искать существующие решения для горизонтального масштабирования такой нагрузки. Запрос должен выполняться на долю секунды, могут быть сотни одновременных запросов. Каждый запрос оценивается в среднем 10 тыс. Кв. Каждый cv похож на около 50 записей в, возможно, 10 таблицах в текущей реляционной форме.Горизонтальное масштабирование поискового запроса

Я хочу, чтобы кластерная система выполняла каждый запрос в нескольких параллельных процессах (на многих серверах) и возвращала агрегированный результат. Он должен быть быстрым и отказоустойчивым. Я искал Hadoop, но похоже, что он предназначен для пакетной обработки, а не для низкой нагрузки в режиме реального времени. Существует Apache Storm, но он предназначен для непрерывной обработки потока. Поэтому я не shure :)

Какой инструмент может удовлетворить мои потребности? Спасибо!

ответ

1
  1. Удостоверьтесь, что вы не переделываете работу, если cv был забит, отметьте его как забитый и не перерабатывайте, если это не необходимо.

  2. Если вы не разделяете данные в postgres, вы можете это сделать. Обычно не все строки должны регулярно обращаться.

  3. Похоже, что вы хотите в основном масштабировать показания, и в этом случае кластер для чтения postgres может быть вариантом.

  4. Взгляните на Elasticsearch, он предназначен для взвешивания очков, огранки и т. Д. Он также должен масштабироваться, но не пробовал это сам.

Я бы определенно начал с 1, но не делаю работу, если вам не нужно.

+0

Thanks Björn! 1) Мы не переделываем работу, потому что cvs оцениваются в соответствии с вакансиями, которые почти всегда имеют разные требования. Мы должны каждый раз забивать каждый cv. 2) Разделение не поможет, потому что большую часть времени ВСЕ cvs забиты. Осколок обработки - это то, что я хочу. 3) У нас есть два кластера узлов, но однострочный запрос не распределяется между узлами в postgres ванили. 4) Я посмотрю на elasticsearch, спасибо! –

+0

Похоже, это не то, что нам нужно. Elasticsearch построен поверх Lucene и является полнотекстовой поисковой системой. Мы не выполняем полнотекстовый поиск и даже не выполняем поиск. Мы применяем скоринг (cv, вакансии) ко всем cvs в базе данных и возвращаем лучшие совпадения. –

+0

Elasticsearch делает гораздо больше, чем полнотекстовый поиск. –

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