美文网首页
增量导入数据——DeltaImport

增量导入数据——DeltaImport

作者: 尚亦汐 | 来源:发表于2016-08-12 09:45 被阅读0次

    在之前《DIH——QuickStart》中,用的是full-import,也就是将数据库表中所有的数据到导入solr中,但是在数据量很大的时候这种方式导入数据就会很慢,尤其是在新增的数据相对于原来的数据来说很少的时候。Solr提供了一种增量导入数据的方式——DeltaImport,现在来学习一下怎么样实现增量导入。
      
      在数据库表中增加一列last_modified(timestamp类型),用来记录数据添加/更新时间:

    在数据库表中新增一列

    然后再在数据库中增加两条数据:
      


    修改data-config.xml

    <dataConfig>
      <dataSource type="JdbcDataSource" 
                  driver="com.mysql.jdbc.Driver"
                  url="jdbc:mysql://localhost:3306/test" 
                  user=xxxx 
                  password=xxxx/>
      <document>
        <entity name="news" pk="id" 
                query="select * from news"
                deltaImportQuery="select * from news where id='${dih.delta.id}'"
                deltaQuery="select id from news where last_modified > '${dih.last_index_time}'">
        </entity>
      </document>
    </dataConfig>
    

    然后在solr admin界面中,执行Dataimport->delta-import就可以了,这里不要选择clean,否则之前的索引都会被删除:

    执行delta-import

    从右边的状态可以看到成功添加了两个文档,再查询中就可以看到新加的两行内容了:
      


    查询到新内容

    Delta-import步骤:

    首先按照query指定的语句查询出符合条件的记录。
      然后从这些数据中根据deltaQuery指定的SQL语句查询出所有需要增量导入的数据的ID号。
      根据deltaImportQuery指定的SQL语句返回所有这些ID的数据,即本次增量导入要处理得数据。

    在conf文件夹下有个dataimport.properties文件,用来记录每个表(entity)索引最后更新的时间。

    person.last_index_time=2016-08-10 01:44:33
    item.last_index_time=2016-08-11 05:33:11
    last_index_time=2016-08-11 07:16:11
    news.last_index_time=2016-08-11 07:16:11

    在full-import或者delta-import之后,就会更新这个文件里面的值。执行delta-import的时候,通过内置变量${dih.last_index_time}获得这个文件中的最近一次索引的时间,与相应表中的last_modified列作比较,如果在last_index_time之后的行,就导入。

    Solr时区问题:

    Solr默认采用的是协调世界时UTC,而数据库中的是本地时间(UTC+8),如果这两个时间表示方式不一致的话会导致增量导入的数据错误.
      在solr.in.sh中修改solr_timezone为“Asia/Shanghai”或者"UTC+8"好像不起作用,所以只能采用下面的方法:
      因为中国时区比UTC多八个小时,所以可以在deltaQuery的时候给last_index_time加上8:

      deltaQuery="select id from news where last_modified >'${dih.last_index_time}+8'"
    

    参考资料:
    [1] https://wiki.apache.org/solr/DataImportHandler
    [2] http://www.aboutyun.com/thread-10496-1-1.html

    相关文章

      网友评论

          本文标题:增量导入数据——DeltaImport

          本文链接:https://www.haomeiwen.com/subject/wigssttx.html