高分求一算法,如何高效扫描远程目录与本地目录同步,判断远程目录是否发生变化

paodan 2009-08-13 10:49:36
如何快速扫描远程目录下某个目录a出现变化(只包括增加文件和修改文件),假如我已经从远程把a复制到本地了,但是我要定时更新本地的a与远程a同步,远程a目录下文件很多,上万个子文件夹,如何高效的扫描到啊?
...全文
663 点赞 收藏 54
写回复
54 条回复
切换为时间正序
请发表友善的回复…
发表回复
paodan 2009-09-30
结了
回复
paodan 2009-09-14
要结贴了,再加20分
回复
paodan 2009-09-07
[Quote=引用 51 楼 java2000_net 的回复:]
我认为,把握源头才是关键。能否在复制这一层面做一些文章。
[/Quote]老紫竹能否解释一下这句。个人认为如果不能在远程设置个监控,也只能是全部对远程进行扫描才能知道哪些文件发生变化了
回复
老紫竹 2009-09-07
我认为,把握源头才是关键。能否在复制这一层面做一些文章。
否则无论怎么样,你也要扫描才知道。
就算你启用了1000个线程,每个定时扫描10个文件夹,也是很耗系统资源的。
回复
hanwangabc 2009-09-07
帮up
回复
paodan 2009-09-01
还真是麻烦,只能寻找一个高效的扫描算法了
回复
paodan 2009-08-31
顶起
回复
paodan 2009-08-30
[Quote=引用 46 楼 flyinfish 的回复:]
我想你过于执着了,楼上有很多很有意思,很合理的解决方案,你需要做的仅仅是申请所需的权限。
寻求更好的算法和改善现有环境都是解决问题的手段。
[/Quote]楼上的很多建议都很好,但是在实际应用中客户会应为安全问题不给这个权限,再说远程机器很多,要是每台机器都开一个监控,维护成本就会很高。但是要是没开监控,那么效率就是哥很大的问题,所以想寻找一个居中的方法解决。
回复
FlyinFish 2009-08-30
我想你过于执着了,楼上有很多很有意思,很合理的解决方案,你需要做的仅仅是申请所需的权限。
寻求更好的算法和改善现有环境都是解决问题的手段。
回复
paodan 2009-08-29
[Quote=引用 44 楼 hciawfhvk 的回复:]
说说我的看法吧,或许对你有帮助。
在远程端品开一扫描文件的WEB SEVICE, 这样在每次需要同步时先调用此服务传入参数,必须包括所SYNC的文件夹和上次SYNC的时间,此方法会在远程机器上运行,只是扫描一个文件夹里的上次更改时间,并将最近更改时间大于上次SYNC时间时,将此文件视为修改的文件或新增的文件,这操作执行时间在远程机上就跟打开一个文件夹本地扫描一样,然后再返回需要重新同步的文件。
上面做完后,再根据所获得的更新文件进行FTP下载服务就可以解决。
[/Quote]对于远程只有访问的权限,没有监控或者其他权限,所以这种方法行不通
回复
zb_fly 2009-08-28
thinking
回复
paodan 2009-08-28
顶起
回复
hciawfhvk 2009-08-28
说说我的看法吧,或许对你有帮助。
在远程端品开一扫描文件的WEB SEVICE, 这样在每次需要同步时先调用此服务传入参数,必须包括所SYNC的文件夹和上次SYNC的时间,此方法会在远程机器上运行,只是扫描一个文件夹里的上次更改时间,并将最近更改时间大于上次SYNC时间时,将此文件视为修改的文件或新增的文件,这操作执行时间在远程机上就跟打开一个文件夹本地扫描一样,然后再返回需要重新同步的文件。
上面做完后,再根据所获得的更新文件进行FTP下载服务就可以解决。
回复
paodan 2009-08-28
再顶
回复
hanwangabc 2009-08-26
期待高手
回复
paodan 2009-08-25
期待大家的意见
回复
paodan 2009-08-24
[Quote=引用 37 楼 rendao0563 的回复:]
你这个应该就算是自动更新服务吧。一般是这样的。服务端会维护一个xml表。这个表有对应的版本。如果客户端得到这个版本发现必须更新,那就向服务端请求对应的这个表,再根据这个表校验本地数据是否需要更新。
[/Quote]我的意思是本地一台机器有n台远程机器上某个目录的备份,对n台远程机器的目录分别存储,并且数据量很大,如何做到本地快速的增量更新,即本地要同步远程的。对于远程机器只有读取文件权限,不能对其目录远程监控。所以每次要判断远程目录是否发生变化时都得扫描一遍远程目录,这样效率就很低了,不知道还有没有好的办法。
回复
rendao0563 2009-08-21
你这个应该就算是自动更新服务吧。一般是这样的。服务端会维护一个xml表。这个表有对应的版本。如果客户端得到这个版本发现必须更新,那就向服务端请求对应的这个表,再根据这个表校验本地数据是否需要更新。
回复
showjim 2009-08-20
[Quote=引用 1 楼 paodan 的回复:]
就是远程文件同步,让客户端与远程端同步,有方法是比较文件名和最后修改时间,但是还是得重新对远程目录全部扫描一遍
[/Quote]
文件夹也有最后修改时间
回复
showjim 2009-08-20
[Quote=引用 29 楼 paodan 的回复:]
引用 28 楼 sbwwkmyd 的回复:
虽然我不会C++,但是我肯定C++能够监视正常的文件修改.
数据源在远程,远程没有安装客户端,除非种植木马
[/Quote]
既然数据源没法控制,那就只能扫描了.本地程序的关键是你在每个阶段能获取哪些信息,能不能按条件获取信息,比如能不能获取最后修改时间可以决定是否接收文件内容,比如文件长度不等时可以决定是改写本地文件.如果要求本地文件的时间段内准确度高一点,可以改变优先级,先修改文件长度不等的,然后比较文件长度相等的.
回复
发动态
发帖子
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
社区公告
暂无公告