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