您是否有删除发生时删除内容的列表(或更改任何删除过程以创建此内容)?如果是这样,您是否不能拥有一个带有时间戳的“我已被删除”列表,然后从该列表中选择项目以仅同步更改的内容?自然地,您仍然希望在服务器上缓慢同步某种批处理作业,但我认为这可以减少负载。
根据更改代码的内容,另一种选择可能是让该进程在删除时直接更新数据库(如果您有多个节点)。这将在系统中引入一些耦合,但将是最有效的方法。
在我看来,最好的方法是对已发生删除的消息传递的想法进行一些变化(即使这只是一个文件,您使用最近删除的文件列表写入某个位置),或者某种直接回调机制,或者通过代码或直接从删除过程中调整应用程序使用的持久数据存储。
即使说了这么多,您总是需要对索引进行某种索引同步或定期完整性检查,以确保所有内容都正确匹配。
您可以(如果您不必根据您拥有的文件数量来划分,我会感到震惊)将文件空间划分为多个文件夹,例如每个文件夹 5,000-10,000 个文件,然后创建一个简单的文件具有文件夹中所有文件名称的哈希值。这会捕获删除,但我仍然认为在删除发生时直接回调某种形式是一个更好的主意。如果你有一个包含所有这些东西的单一文件夹,那么创建一些东西将它分成单独的文件夹(我们在主文件夹下使用简单的数字,这样我们就可以继续下去了)应该会大大加快一切;即使您必须对所有新文件执行此操作并将旧文件原样保留,至少您可以停止文件检索的流血。
在我看来,由于您正在以编程方式控制文件的索引,因此当底层文件系统发生更改时,您确实应该以某种方式涉及(或通知)相同的程序,而不是允许更改发生并且然后查看所有内容以获取更新。自然地,为了捕捉这种通信中断的异常值,您还应该在其中有同步代码来实际检查文件系统中的内容并定期更新索引(尽管这可以并且可能应该分批处理到主应用程序)。