该软件是一款经典的搜索引擎。应用程序的一部分负责爬行/收集数据,另一部分接收数据并构建索引或数据库。最后一部分处理来自客户端的查询,并在检索结果之前对数据执行搜索。
我正在讨论的特定引擎是经常更新数据的引擎(至少每分钟一次),因此查询必须始终对最新数据进行操作。
我的问题很简单。这三个任务是应该由三个独立的流程处理,还是由一个流程专用于每个流程的多个线程处理?
我的问题的主要原因是关于分区内存的最佳方法。如果搜索者必须更新索引器的可用数据,并且索引器必须更新查询处理程序的数据集,那么它们是否有意义生活在相同的进程下并具有相同的地址空间?或者使用共享内存映射文件的单独进程是否可以接受?
我倾向于单独的流程,以便每个流程可以在不同的机器上运行,实现群集,分发等。但就较小数据集的原始速度而言,是否需要采用整合方法?
操作系统是Windows,语言是C ++。
答案 0 :(得分:1)
我不是专家,但我倾向于单独的流程方法,因为它提供了最大的灵活性,扩展能力,易于管理(重新启动一项服务不会影响其他服务)和性能。
我也很想为不同的任务考虑不同的数据库。 如果您采用让一个组件完成一项工作的方法 - 并且做得很好,那么将此原则应用于数据库也是有意义的。
我这取决于你在哪里看到性能瓶子 - 你如何做到这一点。 我正在考虑一个初始收集区域,也许是一个临时区域(排序等)和一个专门用于快速访问和搜索的最终区域。
SQL to SQL批处理/ ETL会提供最好的性能。
思考它 - 我将构建3个单独的应用程序,共同构成解决方案。如果您真的想要,那么这也允许您为不同的任务使用不同的技术。允许更灵活的维护路径。