0

我有一个 postgresql 数据库。在我需要索引的表中,我有大约 2000 万行。当我想一次尝试将它们全部索引时(例如“从 table_name 中选择 *”),我有 Java OutOfMemory 错误,即使我会给 JVM 更多内存。

SOLR 中是否有任何选项可以逐部分索引表(例如,对前 1000000 行执行 sql,然后对其进行索引,然后对第二百万行执行 sql)?

现在我正在使用带有 LIMIT 的 sql 查询。但是,每次当 solr 索引它时,我都需要手动重新启动它。

更新:好的,1.4 已经发布了。似乎没有 OutOfMemory Exceptions,Apache 在 DIH 上做了很大的工作。此外,现在我们可以通过请求传递参数,并在我们的 SQL 选择中使用它们。哇!

4

3 回答 3

1

请参阅此处有关“光标”的部分,这可能会有所帮助。

http://jdbc.postgresql.org/documentation/83/query.html

于 2009-10-29T20:21:12.817 回答
0

您是否考虑过使用 SolrJ 作为客户端?虽然 DIH 很棒,但 Solr 和数据库之间的紧密耦合意味着很难操作数据和解决问题。

使用 SolrJ 客户端,您可以分批迭代您控制的数据库,然后转储并直接转储到 Solr。此外,使用 SolrJ 新的二进制 java 流格式而不是 XML 意味着索引 2000 万行应该很快。

DIH 很棒,直到你遇到这样的问题!

于 2009-10-29T15:42:48.973 回答
0

您是否配置了 autoCommit、batchSize?如果你这样做了,可能是这个错误,尝试更新到主干。

于 2009-10-28T15:56:16.797 回答