2

如何使用 Solrj 处理 Solr 中的事务管理?网上没有太多与此相关的文档。但如果有人可以提供与使用 SolrJ 的事务管理相关的任何链接或信息,我将不胜感激。

4

2 回答 2

2

对于 Solr 和事务,您必须牢记的是没有隔离。Solr 不像我们大多数数据库开发人员习惯的那样支持事务。

提交使所有客户端的所有未决更改对新查询可见。同样,回滚会回滚所有客户端的所有未决更改。零考虑哪个客户端发送了提交/回滚命令。

因此,错误处理不应自动导致回滚。因为影响可能比错误的数据要广泛得多。因此,清理工作可能会更加困难。

Solr 文档中的指导是使用自动提交。在执行批量操作时尤其如此。如果您要批量编制索引,可能使用多个并行客户端,那么最好每隔一段时间(或每隔这么多文档)自动提交一次。这会导致创建的新索引段更少,从而导致整体索引碎片更少。

详细信息将取决于您的 Solr 实例(以及您的复制方法)上发生的查询和索引操作的组合。

这里有一篇很好的 Lucidworks 文章: Understanding Transaction Logs, Soft Commit and Commit In SolrCloud

于 2019-07-15T20:11:39.487 回答
1

您必须以编程方式处理 SolrJ 中的事务。处理多次写入时。

  1. 使用 SolrServer api add 方法将 SolrInputDoucments 添加到服务器。
  2. 添加所有 SolrInputDocuments 后,从 SolrServer api 调用 commit 方法以提交所有更改。
  3. 如果 Solr 发生异常,如果您想回滚对 Solr 的写入,请调用 SolServer api 回滚方法。
  4. 如果您还想回滚对数据库的写入,只需从 catch 块中抛出运行时异常。

这就是我处理事务管理的方式。如果有人有更好的答案,请随时改进答案。

于 2012-05-31T13:44:43.927 回答