我正在进行一个非常简单的性能实验,我将2000个文档发布到我的应用程序中。 谁将他们持久保存到关系数据库并将其发送给Solr进行索引(同步,在同一请求中)。
我正在测试3个用例:
第三个结果没有任何意义,我希望这个行为与第2个结果类似。起初我认为文档并没有真正提交,但我实际上可以看到它们是通过执行一些查询来添加的在实验期间(通过solr web UI)。
我担心我错过了一些非常大的东西。是否有可能在每次添加后提交会使性能降低400倍?!
我用于第2点的代码:
SolrInputDocument = // get doc
SolrServer solrConnection = // get connection
solrConnection.add(doc);
solrConnection.commit();
作为第3点的代码:
SolrInputDocument = // get doc
SolrServer solrConnection = // get connection
solrConnection.add(doc, 1); // According to API documentation I understand there is no need to call an explicit commit after this
答案 0 :(得分:4)
根据这个维基:
https://wiki.apache.org/solr/NearRealtimeSearch
commitWithin默认是软提交。软件提交在使添加的文档立即可搜索方面非常有效。但!他们还没有在磁盘上。这意味着文档被提交到RAM中。在此设置中,您将使用updateLog作为solr实例容错。
您在第2点中所做的是硬提交,即将添加的文档刷新到磁盘。在每次添加文档后执行此操作非常昂贵。因此,发布一堆文档并发出硬提交,甚至将autoCommit设置为一些合理的值,例如10分钟或1小时(取决于用户的期望)。