1

我在一个 MSSQL 服务器上拥有这个大数据库,其中包含由网络爬虫索引的数据。每天我都想使用位于另一台服务器和另一个网络中的 DataImportHandler 更新 SOLR SearchEngine Index。

Solr DataImportHandler 使用查询从 SQL 获取数据。例如这个查询

SELECT * FROM DB.Table WHERE DateModified > Config.LastUpdateDate

ImportHandler 执行 8 种此类选择。每个选择将从数据库中获取大约 1000 行。

要连接到 SQL SERVER,我使用的是com.microsoft.sqlserver.jdbc.SQLServerDriver

我可以为连接添加的参数是:

  • responseBuffering="自适应/全部"
  • batchSize="整数"

所以我的问题是:

每天进行此查询时会出现什么问题? (网络错误除外)我想知道 SQL Server 在这种情况下是如何工作的?

此外,我必须对实现此导入的方式以及如何处理错误做出决定,但首先我需要知道会出现哪些错误。

谢谢!

稍后编辑

我的问题是我不知道这个 SQL 查询怎么会失败。当我每天调用这个导入器时,它会对数据库进行 10 次查询。如果第 5 个查询失败,我必须选择:回滚整个事务并再次执行,或者提交我从前 4 个查询中获得的数据并以某种方式重做第 5 到 10 个查询。但是如果由于其他一些问题,此查询总是失败,我需要考虑另一种方式来导入这些数据。

由于超时操作或类似的事情,这个通过互联网的 sql 查询会失败吗?

4

2 回答 2

0

我在使用这种类型的导入后发现的唯一问题是:

  • 网络问题 - 如果网络连接失败:在这种情况下 SOLR 正在回滚任何更改并且不会发生提交。在我的程序中,我将此识别为错误,并且不记录数据库中的更改。

感谢@GuidEmpty 提供他的评论并为我澄清这一点。

于 2012-02-29T08:00:47.137 回答
-1

权限可能存在问题(不确定您是否控制这些)。

捕获您可以想到的异常并包含全部捕获(Exception exp)可能是一个好主意。

然后将整体视为最坏的情况并回滚(在可以的情况下)并记录异常以供以后包含。

您也没有说您选择什么类型,请记住 text/blob 可能会占用更多空间,并且如果您缓冲任何数据等可能会导致内部问题。

虽然只是快速重新阅读,如果您只是选择,则不需要回滚。

我认为您最好考虑一下您希望实现的目标以及了解所有可能的问题是否会有所帮助?

高温高压

于 2011-11-04T10:55:08.837 回答