我正在开展一个项目,我们正在尝试引入搜索框架。我们即将开始开发,到目前为止我们只完成了一些工作。我们正在努力应对硬件估算。我不确定是否可以使用单个服务器设置满足我们的性能要求,或者我们是否需要使用复制或分布式解决方案。
以下是我们的主要要求
问题
1)在单服务器设置上获得此性能是否可行?
2)如果没有合适的设置来满足性能要求。
3)我们正在考虑Lucene之上的几个框架,其中包括Solr和Zoie。需要什么样的分布式架构来处理所需的负载和性能要求。
答案 0 :(得分:3)
1)在单服务器设置上获得此性能是否可行?
是的,我想是的。但这是一种“边缘”(我希望你知道,我的意思) 你需要的是足够的RAM和CPU功率。 Finlay它取决于“大”文件的大小,如fulltexte左右,以及数据库的大小。
相比之下,我使用lucene和120万个文档,7个文件,大多数是短文件(日期,数字......),但也包括一个大文本字段(500-5000个字符)。这个mysql数据库的大小(由lucene索引)是1-2 GB。系统运行在具有4GB RAM的小型单CPU CPU主机上。全文搜索结果返回100-400ms。 如果您没有大文本字段,结果将更快返回。 (取决于搜索的类型 - >例如facettet搜索) 例如:在char(255)Filed上进行facetet搜索,返回< 70ms
可能对于您的配置,具有大量内存(> 32GB)和> 8个内核的非可视化硬件将非常有用。
每分钟批量更新30-40次
这意味着每分钟30-40个新文件吗?那没问题! 每分钟30-40次更新,包含大量新文档将更具挑战性。 另外,您应该定期优化您的索引(例如每晚)
3)我们正在考虑Lucene之上的几个框架,其中包括Solr和Zoie。
Solr作为tomcat应用程序运行。在这里,你必须定义例如RAM(看上面),它被分配给你的搜索引擎。 分割索引有不同的可能性(为了获得更高的性能或更快的更新),也可以进行群集。
答案 1 :(得分:0)
如果是" singleserver"对于此要求,您应该查看ElasticSearch之类的内容。因为它针对近实时更新进行了优化非常好。 使用Solr,您可以获得类似的性能,但与混合获取/更新请求完全相同Solr在单节点中存在问题。将它拆分为2个或更多节点 - 主/从您将获得与ElasticSearch类似的性能,但在单个节点上 - 没有。
请详细了解这一点 - http://blog.socialcast.com/realtime-search-solr-vs-elasticsearch/