如何为大数据或记录的MySQL数据库正确设置DataImportHandler?

时间:2014-07-03 07:47:02

标签: mysql solr dataimporthandler

我按照手册中的说明设置了Solr的数据导入处理程序。 Solr从MySQL数据库中读取记录。该数据库有大量记录(预计为毫单位/十亿)。 我已经读过批量大小对MySQL不起作用,因为JDBC驱动程序不支持它。我已经尝试将其设置为-1。在这种情况下,Solr执行一次选择并从DB获取所有记录并对其进行索引。

现在,我有问题,因为索引时发生了超时并导致它停止。我发现Solr在异常发生后没有在属性文件中写入任何id值。我不知道如何继续索引其余的记录。

有人可以向我建议如何使用MySQL设置Solr以进行正确的数据导入吗?

以下是我目前使用的数据配置。

<dataConfig>
    <dataSource type="JdbcDataSource" name="ds-2" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/myowndb" batchSize="-1" />
    <document name="statuses">
        <entity name="status" query="select s.*, ti.id2, ti.value2 from tblTable1 s inner join tblTable2 ti on s.table2Id = ti.id;">
            <field column="id" name="id" />
            <field column="statusID" name="statusId" />
            <field column="type" name="type" />
            <field column="date" name="date" />
            <field name="id2" column="id2" />
            <field name="value2" column="value2" />
        </entity>
    </document>
</dataConfig>

修改

根据我今天的测试,看起来batchSize正在运行。如果batchSize设置为-1,它将向MySQL发出单个请求,一次检索所有行。如果设置为大于0的某个值,它将在处理之前将每条记录放入内存中。

接下来是新问题:如何设置数据导入处理程序以便批量编制索引?不仅要从数据库中执行批量选择,还要在收集下一个之前对收集的集合进行索引。

编辑:指定的问题 接下来是阅读的新问题:是否可以将数据库中的行标记为已处理? DIH,onImportStart和onImportEnd中只有两个事件可用。

想法中的当前流程促使我实现EntityProcessor。如果可以知道某个行何时被索引,那么在数据库中为索引行标记isIndexed标志也很容易。这是我实现自定义EntityProcessor。

0 个答案:

没有答案