当 MySQL 数据库中没有可用的最后插入时间时,DIH 中的 Solr 8 delta 查询

问题描述

我必须将一个大约 4TB 大小的数据库导入到 Apache SOlr 8。数据库MysqL,我加入了三个表以从 DB 获取一些信息。 Solr 以云模式运行。使用 this 指南配置 Solr DIH 后,我能够将数据完全导入 Solr。 我的第一个困惑:

  1. DIH 是否适合处理如此庞大的数据?
  2. 有没有更好的选择

接下来,现在我必须确保 Solr 索引与 DB 完全同步,并且应该涵盖以下场景:

  1. 如果添加了一条新记录,则只应在 Solr 中索引该记录
  2. 如果一条记录从 DB 中删除,那么它也应该从 Solr 中删除
  3. 如果现有记录被更新,它也应该在 SOlr 中可见

根据我的参考,如果有一些列有插入时间的列,如 MysqL 数据库中的信息,则没有问题可以处理。但就我而言,只有主键和其他文本数据等。我如何满足上述要求,而没有任何(时间戳)字段在数据库中具有索引时间。

注意:由于某些限制,无法在数据库添加新列。

解决方法

DIH 是这里的好选择。毫无疑问。

DIH 是否适合处理如此大的数据? 是的,没有问题。您可以轻松使用 DIH。

有没有更好的选择。 没有更好的选择。您必须将数据从数据库转换为 csv/Json 格式,然后将其推送到 SOlr。有些人选择了这个选项。但我认为这又是一项可重复的工作或一项开销任务。我建议去 DIH。

如果添加了新记录,则只有该记录应在 Solr 中编入索引。 您可以使用 id 字段对数据进行排序,并检查是否大于前一个 id 的数据。

如果一条记录从 DB 中删除,那么它也应该从 Solr 中删除。 同时点击相同id的solr,将数据从Solr中移除。

如果现有记录被更新,它也应该在 SOlr 中可见 同时更新solr中的记录。这将帮助您实现实时修改。或者将更新后的数据的 id 存储在某处。然后在一段时间或 EOD 或每晚安排一项工作来更新那些存储的 id 的记录。