我需要一些关于算法的帮助。
我有一系列文件,可能数以百万计。这些文档也在MySQL中编入索引。在极端情况下,需要重建此索引。鉴于文档数量众多,重新索引需要在最近到最近才发生。但更重要的是,重新索引需要在计算机重启(或等效)后的同一点重新开始。鉴于该索引一百万个文档可能需要很长时间,因此在重建索引期间可能会添加新文档。
这个相同的集合可以镜像到另一台服务器。我希望有一位审核员确保镜子上存在所有文件。
在这两种情况下,用户都将访问系统,因此我无法使用许多资源。对于第一种情况,我非常希望在完成后获得ETA。
我觉得这些都是同样的问题。但我无法有效地巧妙地了解如何做到这一点。
蛮力方法是拥有数百万个文档的列表+上次检查/索引的时间戳。然后我会拉下"下一个"列表中的一个,检查/索引它,完成后更新时间戳。
这似乎很浪费。
更重要的是,鉴于文档可能被添加到系统但列表没有得到充分更新,我们必须有一个审核员来确保所有文档都在列表中。这是我们试图解决的基本问题。
我已经看到在多种情况下描述过这样的审核员,例如大型的nosql设置。必须有巧妙解决方法的描述。
答案 0 :(得分:0)
对于分段索引,我会一如既往地效率 您可能可以将整个数据库分成较小的DB,索引它们,然后索引索引本身。并且仅对已经改变的人进行重新索引 对于重新索引时的新条目,只需将新条目保留在新的临时DB中,并在重新索引完成后将该DB合并到大DB中。
您可以递归地为较小的段增强此方法。您将不得不分析有多少分段级别将为您提供最快的重新索引时间的权衡。