BBS.ChinaUnix.net
今日推荐    首页 | 新闻 | Linux | AIX | 博客 | 论坛 | 存储 | 人才 | 培训 | 知识库 | 资料 | 读书 | 手册 | 精华 | 下载 | 空间     
  会员: 密码: 免费注册 | 忘记密码 | 会员登录 | 搜索 | 帮助 


开一篇用文件还是数据库的争论,讨论文件IO
首页 » 论坛 » C/C++ »  
[打印] [订阅] [收藏] [推荐给朋友] [本帖文本页]
safedead
风云使者




UID:407631
注册:2006-4-23
最后登录: 2008-07-04
帖子:455
精华:0

可用积分:498
信誉积分:100
专家积分:51 (本版)

状态:...离线...

[个人空间] [短信] [博客]


顶部
1楼 发表于 2008-5-14 10:27 
最近在做一个恶心项目

用FTP同步站点,站点上大约有100万到5000万个文件,文件小的40K,大的3G,99%的文件不超过1M,子目录不超过2000个
网站每天更新最少300M,最多2GB的文件数据,并且不能删除源文件(用于同步的FTP帐号只有浏览和下载权限)

我的任务就是编写这个同步程序,程序的输入参数是源FTP帐号和地址、FTP路径遍历深度、本地文件存储路径
同步程序可能同时处理多个同步事务(同步多个FTP服务器目录到本地目录)

这个业务里面有个特殊需求:那就是同步到本地的文件,有可能被另外的应用程序删除,也有可能原地不动,但绝不会被修改,
除非特别指定,一个文件未更新前不应被重复下载
文件更新的定义是:FTP的LIST看到的文件大小或时间有任何改动,视作文件更新,否则就是旧文件

在安装了足够多的硬盘后(满足业务需要),遇到了一个运行时问题,那就是怎样提高效率?

方案一、
文件下载后直接保存在本地目录,设置文件时间和FTP的LIST信息一致,不允许其它程序删除,这个方案运行时发生inode被用光问题

方案二、
文件下载后先暂存在/dev/shm中,应用BDB保存下载记录(BDB在本地硬盘),然后文件移动到应用系统的磁盘阵列去,这个方案运行时,文件数量超过200万时,CPU占用很高,经查实,是查询BDB占用的,考虑过MySQL,但是BDB速度更快

方案一会导致使用这些同步文件的程序发生变化(它自己要知道哪些文件用过没用过),方案二使得用这些同步文件的程序变得简单,却要求外接存储

有没有更好的方法?

计算资源限制,最多2个4核XEON,最多16G内存,希望速度尽量快,存储花费尽量少



您对本贴的看法:鲜花[0] 臭蛋[0]
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
Sorehead   帅哥
光明使者




UID:161134
注册:2004-5-27
最后登录: 2008-07-04
帖子:727
精华:0

可用积分:857
信誉积分:100
专家积分:40 (本版)

来自:北京
状态:...离线...

[个人空间] [短信] [博客]


顶部
2楼 发表于 2008-5-14 11:12 
用rsync吧



您对本贴的看法:鲜花[0] 臭蛋[0]
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
ideawu
天使



UID:350143
注册:2005-12-15
最后登录: 2008-07-06
帖子:1312
精华:0

可用积分:954
信誉积分:100
专家积分:10 (本版)

状态:...离线...

[个人空间] [短信] [博客]


顶部
3楼 发表于 2008-5-14 11:18 
首先我得承认, 楼主的描述不是很清晰, 业务上和用词上都不是很好理解. 例如:"方案一会导致使用这些同步文件的程序发生变化(它自己要知道哪些文件用过没用过),方案二使得用这些同步文件的程序变得简单,却要求外接存储".

什么是"用过没用过"? 既然发生了变化, 那么原来的程序是什么思路? 我没看出为什么要求外接存储. 还有站点, FTP服务器, 本地文件之间关系, 楼主也应该介绍下. 至少我一时无法看出从哪同步到哪.



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

my resume
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
chuhongze   帅哥
骑士




UID:518646
注册:2007-1-16
最后登录: 2008-07-03
帖子:75
精华:0

可用积分:70
信誉积分:100
专家积分:0 (本版)

状态:...离线...

[个人空间] [短信] [博客]


顶部
4楼 发表于 2008-5-14 12:10 
同意楼上的说法.楼主把实际的环境详细说明下!



您对本贴的看法:鲜花[0] 臭蛋[0]
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
版主 flw   帅哥
广告杀手-法王
侠客



UID:14893
注册:2002-8-12
最后登录: 2008-07-06
帖子:19349
精华:10

可用积分:7999
信誉积分:865
专家积分:100 (本版)

状态:...在线...

[个人空间] [短信] [博客]


顶部
5楼 发表于 2008-5-14 12:18 
99% 的文件不超过 1M——建议还是用数据库试试,开发成本低,短期可能会有比较好的效果。



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

data Maybe a = Nothing
             | Just a

---
如何知道一个变量是什么类型?
如何知道分配的内存有多大?
如何知道 select 的 fd_set 里哪个句柄是无效的?
如何知道指针是不是有效的?
如何通过文件句柄得到文件名?
……
如何知道我昨晚把袜子脱哪儿了?
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
版主 思一克   帅哥
版主-法师




UID:88701
注册:2003-8-25
最后登录: 2008-07-06
帖子:5670
精华:14

可用积分:4216
信誉积分:100
专家积分:31 (本版)

来自:东城
状态:...保密...

[个人空间] [短信] [博客]


顶部
6楼 发表于 2008-5-14 12:20 
自己编同步程序? 和发明轮胎类似.

用rsync非常强大好用.



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

Email: johnye@webizmail.com
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
safedead
风云使者




UID:407631
注册:2006-4-23
最后登录: 2008-07-04
帖子:455
精华:0

可用积分:498
信誉积分:100
专家积分:51 (本版)

状态:...离线...

[个人空间] [短信] [博客]


顶部
7楼 发表于 2008-5-14 12:46 
rsync ??

以前用过rsync
印象不是一般的差
100万文件就慢的一塌糊涂



您对本贴的看法:鲜花[0] 臭蛋[0]
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
gawk
精灵



UID:394228
注册:2006-3-29
最后登录: 2008-07-06
帖子:229
精华:0

可用积分:209
信誉积分:100
专家积分:0 (本版)

状态:...离线...

[个人空间] [短信] [博客]


顶部
8楼 发表于 2008-5-14 13:07 
100w,真强悍



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

虽千万人吾往矣……
修炼xdr中……
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
版主 思一克   帅哥
版主-法师




UID:88701
注册:2003-8-25
最后登录: 2008-07-06
帖子:5670
精华:14

可用积分:4216
信誉积分:100
专家积分:31 (本版)

来自:东城
状态:...保密...

[个人空间] [短信] [博客]


顶部
9楼 发表于 2008-5-14 17:24 
rsync在一般网络上不可能慢. 瓶颈是网络速度.

rsync可以增量备份, 同步备份.

QUOTE:
原帖由 safedead 于 2008-5-14 12:46 发表
rsync ??

以前用过rsync
印象不是一般的差
100万文件就慢的一塌糊涂




您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

Email: johnye@webizmail.com
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
jamesr   帅哥
大天使
人在CU飘,挨刀我就跑



UID:362823
注册:2006-1-13
最后登录: 2008-07-06
帖子:1926
精华:1

可用积分:2513
信誉积分:100
专家积分:10 (本版)

状态:...在线...

[个人空间] [短信] [博客]


顶部
10楼 发表于 2008-5-14 19:45 
注意要使用reiserfs。
一个任务的瓶颈会有很多可能,文件系统性能也应该考虑在内。



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

欢迎参加《Object-oriented Programming with ANSI-C》的翻译:
http://wiki.chinaunix.net/index.php/OOC


Everest 0.5正式发布!
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布

首页 » 论坛 » C/C++ »


 


Copyright © 2001-2008 ChinaUnix.net All Rights Reserved     联系我们:

感谢所有关心和支持过ChinaUnix的朋友们    转载本站内容请注明原作者名及出处

京ICP证041476号


清除 Cookies - ChinaUnix - Archiver - WAP - TOP

Processed in 0.049740 second(s), 4 queries , Gzip enabled