如何解决爬虫会生成很多小文件的问题呢? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
thekoc
V2EX    Python

如何解决爬虫会生成很多小文件的问题呢?

  •  
  •   thekoc 2016-11-20 00:45:40 +08:00 3903 次点击
    这是一个创建于 3247 天前的主题,其中的信息可能已经有所发展或是发生改变。
    还剩很多空间,但是 inode 空间已经不够了。是应该在格式化硬盘的时候就多分配一点 inode 空间呢,还是在设计爬虫的时候就不要生成太多小文件呢?

    如果是前者的话,有办法在不丢失 vps 上数据和程序的情况下改变 inode 大小么?
    如果是后者的话,我爬的是 zhihu ,现在是每个回答是一个单独的文件。该怎么减少小文件的数量呢?都写在同一个文件,然后用多线程锁么?
    17 条回复    2016-11-22 14:42:44 +08:00
    cdwyd
        1
    cdwyd  
       2016-11-20 00:58:33 +08:00 via Android   1
    每个回答放在一行,或者入库
    billlee
        2
    billlee  
       2016-11-20 01:08:08 +08:00   1
    你听说过数据库吗?
    thekoc
        3
    thekoc  
    OP
       2016-11-20 01:25:39 +08:00
    @billlee 听说过……觉得项目小就没有用。这种情况还是要用比较好么?
    thekoc
        4
    thekoc  
    OP
       2016-11-20 01:30:47 +08:00
    看了一下 sqlite ,准备用它了。
    billlee
        5
    billlee  
       2016-11-20 01:30:50 +08:00   2
    @thekoc 是啊, ext 文件系统的设计不适合存放大量小文件, btrfs 也许可以。
    但一个文件还会有用户权限修改时间什么的很多元数据,开销很大。打开文件的时候还要占用文件描述符。
    你用个简单的 SQLite 数据库也比直接创建文件好。
    em70
        6
    em70  
       2016-11-20 01:32:05 +08:00 via iPhone   1
    本来就是玩,你就尽量折腾呗,各种方法都试试,多好的提高机会啊
    bazingaterry
        7
    bazingaterry  
       2016-11-20 02:53:41 +08:00   1
    @thekoc 都用数据库了,干脆就 MySQL 吧。
    onlyice
        8
    onlyice  
       2016-11-20 08:52:28 +08:00 via Android   1
    感觉楼上说的解决办法都对,但是没有解答这个基本问题:为什么放文件会比放数据库更占用磁盘空间?

    楼主可以试着解答下
    onlyice
        9
    onlyice  
       2016-11-20 08:53:14 +08:00 via Android
    @onlyice 我的错,我才发现你的问题是 inode 不够了。。
    smallghost
        10
    smallghost  
       2016-11-20 08:54:04 +08:00   1
    @bazingaterry 我觉得用 Postgres 数据库好!
    doubleflower
        11
    doubleflower  
       2016-11-20 09:12:50 +08:00   1
    linode 可以自已格式化一个盘挂上的,格式成 ReiserFS 就可以了,那个不限 inode 数。
    Zzzzzzzzz
        12
    Zzzzzzzzz  
       2016-11-20 11:34:13 +08:00   1
    leveldb 啊
    asd103
        13
    asd103  
       2016-11-20 12:01:58 +08:00 via iPhone   1
    我还说爬虫怎么会自己产生小文件呢。。。
    yaozeyuan93
        14
    yaozeyuan93  
       2016-11-20 13:26:52 +08:00   1
    @onlyice 因为文件有最低大小←_←
    好像 4kb 吧我记得
    cadl
        15
    cadl  
       2016-11-20 13:39:31 +08:00   1
    感觉可以使用个 bitcask 引擎的存储系统试试。
    crayonyi
        16
    crayonyi  
       2016-11-21 10:51:33 +08:00
    以前我们的图片服务器也遇到一样的问题, inode 耗净,磁盘空间却还很多。

    解决方法当然是用数据库或者使用分布式文件存储方案:

    1 ) MogileFS 、 FastDFS 等分布式文件存储系统

    2 ) OSS 、七牛、又拍云等云存储方案(每月每 G 才几毛钱)
    yanzixuan
        17
    yanzixuan  
       2016-11-22 14:42:44 +08:00
    一般入 mongodb ,如果觉得喜欢文件的话,也可以使用 mongo 的文件存储。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3556 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 04:34 PVG 12:34 LAX 21:34 JFK 00:34
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86