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