gpt4 book ai didi

java - 如何有效地监控远程位置的变化?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:17:03 25 4
gpt4 key购买 nike

我们必须监控通过 FTP、SMB 访问的远程系统文件的变化。我们对远程系统/操作系统没有任何 SSH 访问权限。我们对远程系统的唯一看法是 FTP 或 Samba 让我们看到的内容。

我们今天做什么:

定期扫描整个目录,在内存中构建一个表示来处理我们的事情,然后将其与我们在数据库中的内容合并。

我们想做什么:

能够确定目录是否已更改,从而确定是否需要解析。理想情况下,永远不必进行完整的解析。我们不想过分依赖操作系统功能 (inodes...),因为它可能会从一个安装更改为另一个安装。

主要目标:当数据量非常大时,这个过程开始变慢。这个日期中只有百分之几是新的,需要解析。如何解析并仅将这部分添加到我们的数据库中?

我们目前讨论的线索:

  • 检查文件夹的大小
  • 对文件使用校验和
  • 检查文件夹/文件的最后修改日期

我们真正想要的:

一些输入和最佳实践,因为这个问题很常见,应该已经讨论过了,我们不想在这一点上做一些过于复杂的事情。

在此先感谢一群开发人员 ;-)

我们使用 java/spring/hibernate 堆栈,但我认为这在这里并不重要。

编辑:基本上,我们访问 FTP 服务器或等效服务器。本地副本不是一种选择,因为数据量太大了。

最佳答案

Java 远程目录轮询器 (rdp4j) 库可以帮助您轮询 FTP 位置并通知您以下事件:目录中的文件添加/删除/修改。它使用目录中每个文件的 lastModified 日期,并将它们与之前的轮询进行比较。

查看完整 User Guide ,其中包含以下 API 快速教程中的 FtpDirectoryMyListener 的实现:

package example

import java.util.concurrent.TimeUnit;
import com.github.drapostolos.rdp4j.DirectoryPoller;
import com.github.drapostolos.rdp4j.spi.PolledDirectory;

public class FtpExample {

public static void main(String[] args) throws Exception {
String host = "ftp.mozilla.org";
String workingDirectory = "pub/addons";
String username = "anonymous";
String password = "anonymous";
PolledDirectory polledDirectory = new FtpDirectory(host, workingDirectory, username, password);

DirectoryPoller dp = DirectoryPoller.newBuilder()
.addPolledDirectory(polledDirectory)
.addListener(new MyListener())
.setPollingInterval(10, TimeUnit.MINUTES)
.start();

TimeUnit.HOURS.sleep(2);

dp.stop();
}
}

关于java - 如何有效地监控远程位置的变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5157780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com