如何使用 Solrj 处理 Solr 中的事务管理?网上没有太多与此相关的文档。但如果有人可以提供与使用 SolrJ 的事务管理相关的任何链接或信息,我将不胜感激。
问问题
3943 次
2 回答
2
对于 Solr 和事务,您必须牢记的是没有隔离。Solr 不像我们大多数数据库开发人员习惯的那样支持事务。
提交使所有客户端的所有未决更改对新查询可见。同样,回滚会回滚所有客户端的所有未决更改。零考虑哪个客户端发送了提交/回滚命令。
因此,错误处理不应自动导致回滚。因为影响可能比错误的数据要广泛得多。因此,清理工作可能会更加困难。
Solr 文档中的指导是使用自动提交。在执行批量操作时尤其如此。如果您要批量编制索引,可能使用多个并行客户端,那么最好每隔一段时间(或每隔这么多文档)自动提交一次。这会导致创建的新索引段更少,从而导致整体索引碎片更少。
详细信息将取决于您的 Solr 实例(以及您的复制方法)上发生的查询和索引操作的组合。
这里有一篇很好的 Lucidworks 文章: Understanding Transaction Logs, Soft Commit and Commit In SolrCloud
于 2019-07-15T20:11:39.487 回答
1
您必须以编程方式处理 SolrJ 中的事务。处理多次写入时。
- 使用 SolrServer api add 方法将 SolrInputDoucments 添加到服务器。
- 添加所有 SolrInputDocuments 后,从 SolrServer api 调用 commit 方法以提交所有更改。
- 如果 Solr 发生异常,如果您想回滚对 Solr 的写入,请调用 SolServer api 回滚方法。
- 如果您还想回滚对数据库的写入,只需从 catch 块中抛出运行时异常。
这就是我处理事务管理的方式。如果有人有更好的答案,请随时改进答案。
于 2012-05-31T13:44:43.927 回答