首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Solr DataImportHandler - batchSize="-1“不起作用

Solr DataImportHandler - batchSize="-1“不起作用
EN

Stack Overflow用户
提问于 2017-03-24 14:29:47
回答 1查看 1.3K关注 0票数 0

我正在使用Apache 6.4.1。因为我使用的是一个非常大的数据库(超过3mio行),所以我想在db-data-config.xml中添加batchSize="-1“。

但如果我这么做,它就成功了。没有batchSize,我可以得到前2k行,而不是"java.lang.RuntimeException: java.lang.StackOverflowError“错误。

在Solrconfig.xml中

代码语言:javascript
复制
<requestHandler name="/dataimport" class="solr.DataImportHandler">
<lst name="defaults">
  <str name="config">db-data-config.xml</str>
</lst>

在db-data-config.xml中

代码语言:javascript
复制
<dataConfig>
  <dataSource type="JdbcDataSource"
          driver="com.microsoft.sqlserver.jdbc.SQLServerDriver"
          url="jdbc:sqlserver://***:1433;integratedSecurity=true;
          Initial Catalog=***;"
          batchSize="-1"/>
...

为什么batchSize="-1“不起作用?(batchSize="200“或其他正在工作)

更新--如果我在Dataimporthandler中将调试设置为false,那么它就有效了!

EN

回答 1

Stack Overflow用户

发布于 2017-03-24 20:24:39

我不认为把batchSize设置为'-1‘对你的处境没有帮助。这是在Solr DataImportHandler源代码中编写的

代码语言:javascript
复制
if (batchSize == -1)
  batchSize = Integer.MIN_VALUE;

  [... omissis ...]

Statement statement = c.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
statement.setFetchSize(batchSize);

因此,请再次检查哪些参数接受setFetchSize方法。

setFetchSize -给JDBC驱动程序一个提示,当这个Statement生成的ResultSet对象需要更多行时,应该从数据库中获取多少行。如果指定的值为零,则忽略提示。默认值为零。

所以,驱动程序可以随意忽略这个提示,也许它只是在整张表中阅读。您也可以尝试更改JDBC驱动程序的版本..。

我认为您首先应该根据网络延迟和每次往返要检索的记录量来调整值。

索引性能和mssql服务器负载取决于批处理大小。试着从小尺寸开始,然后逐渐增加。

如果这不起作用,试着彻底改变JDBC驱动程序。

返回到batchSize参数,只有少数情况下不需要它。一般来说,这就是这种方法应该具备的行为:

  • 如果您已经为JVM配置了足够的内存来读取整个表
  • 如果您的JDBC驱动程序出现异常,调用setFetchSize()方法
  • 如果您正在处理MySql JDBC驱动程序,它有一个已知的错误
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43002116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档