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