solr中delta导入的效率方面
Efficiency aspect of delta import in solr
我有大约 2100000 行的数据。完全导入所需时间约为 2 分钟。对于 table 中的任何更新,我使用增量导入来索引更新。增量导入花费的时间为 6 分钟。
考虑到效率方面,完全导入比增量导入更好。那么,delta import 需要什么?有没有更好的方法来使用增量导入来提高效率?
我按照 documentation 中的步骤操作。
数据-config.xml
<dataConfig>
<dataSource type="JdbcDataSource" driver="com.dbschema.CassandraJdbcDriver" url="jdbc:cassandra://127.0.0.1:9042/test" autoCommit="true" rowLimit = '-1' batchSize="-1"/>
<document name="content">
<entity name="test" query="SELECT * from person" deltaImportQuery="select * from person where seq=${dataimporter.delta.seq}" deltaQuery="select seq from person where last_modified > '${dataimporter.last_index_time}' ALLOW FILTERING" autoCommit="true">
<field column="seq" name="id" />
<field column="last" name="last_s" />
<field column="first" name="first_s" />
<field column="city" name="city_s" />
<field column="zip" name="zip_s" />
<field column="street" name="street_s" />
<field column="age" name="age_s" />
<field column="state" name="state_s" />
<field column="dollar" name="dollar_s" />
<field column="pick" name="pick_s" />
</entity>
</document>
设置增量索引的常用方法(就像您所做的那样)运行 2 个查询而不是一个查询。所以在某些情况下它可能不是最优的。
我更喜欢设置 delta like this,这样只需维护一个查询,它更简洁,并且 delta 在单个查询中运行。你应该尝试一下,它可能会改善情况。缺点是删除,你要么做一些软删除,要么你仍然需要通常的增量配置(我赞成第一个)。
当然,还要确保 last_modified 列已正确编入索引。我不熟悉 Cassandra jdbc 驱动程序,你应该仔细检查一下。
最后一件事,如果您使用的是 Datastax Enterprise Edition,则可以通过 Solr 进行查询(前提是您为此进行了配置)。在这种情况下,您还可以尝试索引 SolrEntityProcessor 并使用一些请求参数技巧,您也可以进行完整索引和增量索引。我以前用的很成功
我有大约 2100000 行的数据。完全导入所需时间约为 2 分钟。对于 table 中的任何更新,我使用增量导入来索引更新。增量导入花费的时间为 6 分钟。
考虑到效率方面,完全导入比增量导入更好。那么,delta import 需要什么?有没有更好的方法来使用增量导入来提高效率?
我按照 documentation 中的步骤操作。
数据-config.xml
<dataConfig>
<dataSource type="JdbcDataSource" driver="com.dbschema.CassandraJdbcDriver" url="jdbc:cassandra://127.0.0.1:9042/test" autoCommit="true" rowLimit = '-1' batchSize="-1"/>
<document name="content">
<entity name="test" query="SELECT * from person" deltaImportQuery="select * from person where seq=${dataimporter.delta.seq}" deltaQuery="select seq from person where last_modified > '${dataimporter.last_index_time}' ALLOW FILTERING" autoCommit="true">
<field column="seq" name="id" />
<field column="last" name="last_s" />
<field column="first" name="first_s" />
<field column="city" name="city_s" />
<field column="zip" name="zip_s" />
<field column="street" name="street_s" />
<field column="age" name="age_s" />
<field column="state" name="state_s" />
<field column="dollar" name="dollar_s" />
<field column="pick" name="pick_s" />
</entity>
</document>
设置增量索引的常用方法(就像您所做的那样)运行 2 个查询而不是一个查询。所以在某些情况下它可能不是最优的。
我更喜欢设置 delta like this,这样只需维护一个查询,它更简洁,并且 delta 在单个查询中运行。你应该尝试一下,它可能会改善情况。缺点是删除,你要么做一些软删除,要么你仍然需要通常的增量配置(我赞成第一个)。
当然,还要确保 last_modified 列已正确编入索引。我不熟悉 Cassandra jdbc 驱动程序,你应该仔细检查一下。
最后一件事,如果您使用的是 Datastax Enterprise Edition,则可以通过 Solr 进行查询(前提是您为此进行了配置)。在这种情况下,您还可以尝试索引 SolrEntityProcessor 并使用一些请求参数技巧,您也可以进行完整索引和增量索引。我以前用的很成功