全部产品
云市场

配置TTL

更新时间:2020-04-08 15:38:49

前言

对于大多数业务来说,数据可能只需要保留一段时间,过期的数据不再需要。从成本和性能考量上来说,能够清理掉旧数据是最好的,TTL可以完美解决这个场景,不需要业务逻辑主动delete数据,只需要设置合理的TTL即可,内核自动清理过期数据。下面介绍如何配置索引数据的TTL。

TTL原理介绍

写入的索引数据中必须包含有时间字段列,用来标识数据的起始时间,后台线程周期性的发起deleteByQuery:[* TO 当前时间-TTL值]。

  1. <processor class="solr.processor.DocTTLUpdateProcessorFactory">
  2. <int name="expirationFieldName">update_version_l</int>
  3. <int name="ttlSeconds">2592000</int>
  4. <int name="autoDeletePeriodSeconds">86400</int>
  5. </processor>

expirationFieldName 写入的数据中必须携带这个时间字段,必须为long类型。示例中给出的是系统默认值,可以不需要更改,在从HBase同步到Solr时,我们自动会为该值设置系统时间。默认可不填。

ttlSeconds 代表索引数据的过期时间,单位为秒,默认为永久保存。示例中给出的是30天。

autoDeletePeriodSeconds 代表后台清理旧数据的周期,默认为-1。示例中给出的是1天执行一次,这个值不要配置的太短,建议为1天。

如何修改TTL

  1. 下载配置集_indexer_default参考
  2. 注释掉solrconfig.xmldefault-chain的配置
    1. <!-- 注释掉
    2. <updateRequestProcessorChain name="default-chain" default="true">
    3. <processor class="solr.LogUpdateProcessorFactory">
    4. <int name="maxNumToLog">3</int>
    5. <int name="slowUpdateThresholdMillis">5000</int>
    6. </processor>
    7. <processor class="solr.processor.DocBasedVersionConstraintsProcessorFactory">
    8. <bool name="ignoreOldUpdates">true</bool>
    9. <str name="versionField">update_version_l</str>
    10. <str name="deleteVersionParam">del_version</str>
    11. </processor>
    12. <processor class="solr.DistributedUpdateProcessorFactory"/>
    13. <processor class="solr.RunUpdateProcessorFactory"/>
    14. </updateRequestProcessorChain>
    15. -->
  3. 打开ttl-chain的配置,根据业务需要修改TTL的配置值
    1. <updateRequestProcessorChain name="ttl-chain" default="true">
    2. <processor class="solr.LogUpdateProcessorFactory">
    3. <int name="maxNumToLog">3</int>
    4. <int name="slowUpdateThresholdMillis">5000</int>
    5. </processor>
    6. <processor class="solr.processor.DocTTLUpdateProcessorFactory">
    7. <int name="ttlSeconds">2147483647</int>
    8. <int name="autoDeletePeriodSeconds">-1</int>
    9. <bool name="autoSoftCommit">false</bool>
    10. </processor>
    11. <processor class="solr.processor.DocBasedVersionConstraintsProcessorFactory">
    12. <bool name="ignoreOldUpdates">true</bool>
    13. <str name="versionField">update_version_l</str>
    14. <str name="deleteVersionParam">del_version</str>
    15. </processor>
    16. <processor class="solr.DistributedUpdateProcessorFactory"/>
    17. <processor class="solr.RunUpdateProcessorFactory"/>
    18. </updateRequestProcessorChain>
  4. 更新配置集
    1. ./solr zk upconfig -d conf/ -n myconf
  5. Reload Collectionreload_collection