Algorithm 我需要一个持久的互动者的想法/事先研究

Algorithm 我需要一个持久的互动者的想法/事先研究,algorithm,iteration,partitioning,audit,Algorithm,Iteration,Partitioning,Audit,我需要一些关于算法的帮助 我收集了很多文件,可能有数百万份。这些文档也在MySQL中编制索引。在极端情况下,需要重建此索引。考虑到大量文档,重新编制索引需要在最近到最不最近的时间内进行。但更重要的是,重新索引需要在计算机重新启动(或等效)后的同一点重新开始。考虑到索引一百万个文档可能需要很长时间,在重新索引期间可能会添加新文档 同一个集合可以镜像到另一台服务器。我希望有一名审计员,确保所有文件都在镜子上 在这两种情况下,用户都将访问系统,因此我不能占用太多资源。对于第一个案例,我非常希望得到它结

我需要一些关于算法的帮助

我收集了很多文件,可能有数百万份。这些文档也在MySQL中编制索引。在极端情况下,需要重建此索引。考虑到大量文档,重新编制索引需要在最近到最不最近的时间内进行。但更重要的是,重新索引需要在计算机重新启动(或等效)后的同一点重新开始。考虑到索引一百万个文档可能需要很长时间,在重新索引期间可能会添加新文档

同一个集合可以镜像到另一台服务器。我希望有一名审计员,确保所有文件都在镜子上

在这两种情况下,用户都将访问系统,因此我不能占用太多资源。对于第一个案例,我非常希望得到它结束时的预计到达时间

我觉得这些都是同样的问题。但我不知道如何高效、巧妙地完成它

蛮力方法将有一个数百万个文档的列表,以及它们上次检查/索引的时间戳。然后我会从列表中拉出“下一个”,检查/索引它,完成后更新时间戳

这似乎是浪费

更重要的是,考虑到一个文档可能被添加到系统中,但列表没有得到充分更新,我们必须有一个审核员来确保所有文档都在列表中。这是我们试图解决的基本问题


我见过在多种情况下描述这种审核员,例如大型nosql设置。必须有解决这个问题的聪明方法的描述。

我会像往常一样高效地使用分段索引。
您可能可以将整个数据库划分为更小的数据库,对它们进行索引,然后对索引本身进行索引。并且只对已更改的用户重新编制索引。
对于重新索引时的新条目,只需将新条目保留在新的临时数据库中,并在重新索引完成后将该数据库合并到大数据库中即可


对于较小的段,可以递归地增强这种方法。您必须分析多少个分段级别将为您提供最快的重新索引时间。

因此,将问题划分为更小的分段,可能会对某些分段进行优先级排序,并在每次分段完成时保存状态。听起来您的审计员也是您的索引器。您似乎期望索引需要很长时间,并优先考虑最近添加的内容。你能把工作分成工作包吗?是否有类似于文档计数器的东西,您可以利用它查找不属于任何特定工作包的文档?我想你可以按文件到达的日期(或星期…)进行分段,如果它们有时间戳的话。既是索引者又是审核员。审核员确保DB和FS同步。请注意,FS可能是远程FS(也就是更可能失去同步)。我没有文档到达的日期,但我有文档创建的日期。这些通常会有所不同,例如,在安装系统时添加所有以前的发票,但也有会计原因(现在创建发票,但下一季度开票)。文档以/yyy-MM/DD/DOC类型结构存储。但YYYY-MM、type、DD将是理想的索引顺序。