Предложения, необходимые для потоковой передачи и архитектуры процессов для программного обеспечения поисковых систем

Программа представляет собой классическую поисковую систему. Одна часть приложения занимается сканированием / сбором данных, а другая принимает эти данные и создает индекс или базу данных. Последняя часть обрабатывает запросы от клиентов и выполняет поиск данных перед получением результатов.

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

У меня простой вопрос. Должны ли эти три задачи обрабатываться тремя отдельными процессами или одним процессом с несколькими потоками, выделенными для каждого?

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

Я склоняюсь к отдельным процессам, чтобы каждый мог работать на разных машинах, обеспечивая кластеризацию, распределение и т. Д. Но с точки зрения чистой скорости для небольших наборов данных, будет ли предпочтительнее консолидированный подход?

ОС - Windows, язык - C ++.


person Rhubarb    schedule 05.03.2010    source источник


Ответы (1)


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

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

Это зависит от того, где вы видите узкие места в производительности, и как вы это делаете. Я думаю о начальной области сбора, возможно, о промежуточной области (сортировка и т. Д.) И о конечной области, предназначенной для быстрого доступа и поиска.

Я полагаю, что пакетные процессы SQL в SQL / ETL дадут лучшую производительность.

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

person Adrian K    schedule 05.03.2010