Программное обеспечение является классической поисковой системой. Есть одна часть приложения, которому поручено обходить/собирать данные, а есть еще один, который берет эти данные и строит индекс или базу данных. Последняя часть обрабатывает запросы от клиентов и выполняет поиск по данным, прежде чем извлекать результаты.Предложения для потоковой обработки и архитектуры процесса для программного обеспечения для поисковых систем
Конкретный движок, который я обсуждаю, - это тот, где данные часто обновляются (не реже одного раза в минуту), поэтому запросы всегда должны работать с последними данными.
Мой вопрос прост. Должны ли эти три задачи обрабатываться тремя отдельными процессами или одним процессом с несколькими потоками, предназначенными для каждого?
Основная причина моего вопроса - наилучший способ разделить память. Если поисковик должен обновить доступные данные для индексатора, а индексирующее устройство должно обновить наборы данных для обработчика запросов, будет ли смысл, чтобы все они жили в одном процессе и имели одно и то же адресное пространство? Или было бы приемлемо иметь отдельные процессы, которые используют файлы с распределенной памятью?
Я склоняюсь к отдельным процессам, чтобы каждый мог жить на другой машине, позволяя кластеризовать, распределять и т. Д. Но с точки зрения необработанной скорости для меньших наборов данных предпочтительным был бы консолидированный подход?
ОС - это Windows, язык C++.