请教文件夹频繁遍历与显示的实现方式

mysteryboy2000 2009-03-09 09:41:12
一个文件件夹下,有三十多个子文件夹,每个文件夹下面每个都会生成很多CSV文件及PDF文件

现在要在前台检索这个文件夹下的所有文件。因为不用数据库,初步想法只是初过遍历算法循环这个文件夹下所有的文件,然后显示到前台。
但是文件一多。性能估计就成问题。而且文件服务器与业务显示用服务器分布在同一个局域网的不同机器上,虽然是千兆连接,但是NETWORK I/O
总感觉不太好。。不过也没有办法。

所以请各位大侠给点意见,有什么好的办法与方案优化文件检索与NETWORK I/O ?
甚至推翻我的方案,另起炉灶的好方案也是大欢迎 ;) thanks in advance :)
...全文
159 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
allen1981813 2009-03-20
  • 打赏
  • 举报
回复
模式上的推荐:Proxy模式是必然的。
从这里做切入点看看。
团队力量足够,这制作一个交互协议来实现,
如果没有足够资源,那么可以搜一些类似WebService之类的已经封装好的东西。
hmt.sysfixer.net 2009-03-13
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 mysteryboy2000 的回复:]
引用 7 楼 rickyzhang2008 的回复:
引用 6 楼 mysteryboy2000 的回复:
楼上的,遍历文件夹方法也是读取文件夹下的点文件(.)啊,我觉得与你所说的方法没有什么差别 。。。。点文件里该有的信息都有的。。。


一个是在文件服务器的电脑上读取文件夹的信息,也就是说是在本机读取信息,然后把
信息存储在本机的txt文件里面;
而前台服务器只是读取文件服务器中的txt文件里面的内容,这样通过网络io操作少很多。



[/Quote]
我发现lz还是有些笨的
1.文件服务器自动检索文件信息存储在文件服务器的txt文件(这步是规定某个时候自动执行的)
2.前台服务器只是读取文件服务器中的txt文件里面的内容
如果你用前台服务器在当时用的时候去检索,如果文件多了会很慢,你知道不?????
mysteryboy2000 2009-03-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 rickyzhang2008 的回复:]
引用 6 楼 mysteryboy2000 的回复:
楼上的,遍历文件夹方法也是读取文件夹下的点文件(.)啊,我觉得与你所说的方法没有什么差别 。。。。点文件里该有的信息都有的。。。


一个是在文件服务器的电脑上读取文件夹的信息,也就是说是在本机读取信息,然后把
信息存储在本机的txt文件里面;
而前台服务器只是读取文件服务器中的txt文件里面的内容,这样通过网络io操作少很多。
[/Quote]

检索时发生的文件IO是在文件服务器内部的,不走网络。

你的思路是先检索(这个肯定产生服务器内部IO是逃也逃不掉的),然后你又把检索结果生成到一个文件里又会产生一次服务器内部IO。然后把这个文件通过网络传过来,又会产生一次文件IO,然后是NETWORK上的消耗。

而我本来的思路是直接检索文件,然后把检索到的结果直接从内存通过网络传给客户端 。所以我基本不同意你的做法。
mysteryboy2000 2009-03-09
  • 打赏
  • 举报
回复
楼上的,遍历文件夹方法也是读取文件夹下的点文件(.)啊,我觉得与你所说的方法没有什么差别 。。。。点文件里该有的信息都有的。。。
hmt.sysfixer.net 2009-03-09
  • 打赏
  • 举报
回复
对lz有个疑问:
在文件服务器中如果删除或增加文件是手工的吧,比如鼠标直接选中文件夹下的文件然后删除等,
如果是这样的话,那里面的内容不知道怎么可以知道发生变化了;
但有个替换方案可以参考:
用文件来存放pdf等文件的统计信息,比如很简单的txt文件,格式如下:
文件名 格式 大小等等

然后前台显示服务器就直接读取文件服务器的txt文件就直接可以知道文件信息了;
同时,在文件服务器中可以写个小程序进行轮询文件夹的内容是否改变及相应的操作。

我觉得应该可以解决lz的问题,起码比lz原来的方案好很多
mysteryboy2000 2009-03-09
  • 打赏
  • 举报
回复
DB我也正在考虑,谢谢您的提议。:)

关于NETWORK IO,请大家继续发表意见 ;)
mysteryboy2000 2009-03-09
  • 打赏
  • 举报
回复
再补充一下。因为是跨服务器遍历,所以想尽量减少IO的发生,因为是使用NFS文件系统,不知道可否实现仅在文件夹下的文件内容发生变化的时候才通知遍历程序 ?
diannaomingong 2009-03-09
  • 打赏
  • 举报
回复
为什么不用数据库呢
建议用伯克利DB或者SQLite

diannaomingong 2009-03-09
  • 打赏
  • 举报
回复
我觉得读txt文件不如用文件型数据库
表面有些IO,实际还是很快很快的
hmt.sysfixer.net 2009-03-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 mysteryboy2000 的回复:]
楼上的,遍历文件夹方法也是读取文件夹下的点文件(.)啊,我觉得与你所说的方法没有什么差别 。。。。点文件里该有的信息都有的。。。
[/Quote]

一个是在文件服务器的电脑上读取文件夹的信息,也就是说是在本机读取信息,然后把
信息存储在本机的txt文件里面;
而前台服务器只是读取文件服务器中的txt文件里面的内容,这样通过网络io操作少很多。
tianma2005123 2009-03-09
  • 打赏
  • 举报
回复
帮顶……

5,530

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧