我的申请打算定期向Solr插入文件。有两个注意事项:
我发现ConcurrentUpdateSolrClient
是一个候选解决方案,它是线程安全的,它有一个队列来缓冲和刷新一个连接中的许多文档。但是当我测试它时我很困惑。我的问题是,
答案 0 :(得分:3)
SolrClient
是线程安全的,如果您的插入/更新/删除在一个集合或核心插入Solr实例,您可以跨多个线程共享SolrClient
实例。
但Solr并没有像你想象的那样在经典的RDBMS中进行交易。
您必须知道,如果您有更多SolrClient
个实例(在同一个应用程序或不同的应用程序和服务器中)并发更新集合/核心,则第一个向该集合/核心发送提交的客户端,承诺每个客户完成所有更新,直到那一刻。
另一方面,如果SolrClient
个实例发送回滚,它会回滚所有已完成的更新(即使是其他SolrClient客户端)。
有许多策略可以在Solr中同时更新文档,并了解Solr中的提交是如何工作的,我热烈推荐阅读
如果您正在编写自己的多线程应用程序,我只建议集中提交提交和回滚。
ConcurrentUpdateSolrClient
缓冲所有添加的文档并写入它们 进入开放的HTTP连接。 此类是线程安全的。<强>虽然 可以使用此实现进行任何SolrClient请求 仅建议将ConcurrentUpdateSolrClient与/ update一起使用 请求。类HttpSolrClient更适合查询 接口