我有一个数据库表和一个Lucene(可能是Solr)索引。目标是索引数据库表,每行只有一个文档。但是:
此处无需处理过时或需要删除的文档。我只需要确保每一行最终都有一个文档,尽可能少浪费时间。
更新或删除过时的文档由系统的一个单独部分处理,在此重新同步机制指示完成后,可以假定该部分仅运行。 (事实上,一个强大的更新/删除系统很容易......)
以前这个任务是通过强力设置差异完成的,但是这对于特别大的数据集来说会遇到困难,并且解决方案确实需要利用部分同步来支持恢复:如果应用程序总是生成一些在重新启动之前的进度最终将同步商店。
差异摘要https://www.ics.uci.edu/~eppstein/pubs/EppGooUye-SIGCOMM-11.pdf看起来很有趣,但似乎只适用于数据存储具有必要的智能来自行计算的情况。在这种情况下,只有一个应用程序在完成这项工作,它只能查询,插入和删除两个商店。
到目前为止,我认为这里有三个基本案例:
是否有一种既定的技术来解决这个问题?我们确实使用一种事务日志来记录需要添加的内容,但这只能处理正常操作,而不是初始同步或后续迁移修复。
我知道有些产品和系统可以为我“处理”这个问题,但是还有其他实现问题意味着此系统必须现在在现有代码库中实现,尽管它可能会在未来被更通用的解决方案所取代。事实上,这一点的重点是将当前系统变为“中途之家”,以便能够使用其他解决方案。
我认为系统的更新/删除部分可能会被滥用以记录完整扫描的进度,方法是添加占位符文档,这些文档将在流程完成时自动删除?当套装几乎同步时,我想避免全扫描,但是......