推荐学习书目
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 · Nov 20, 2016 · 4283 views
    This topic created in 3486 days ago, the information mentioned may be changed or developed.
    还剩很多空间,但是 inode 空间已经不够了。是应该在格式化硬盘的时候就多分配一点 inode 空间呢,还是在设计爬虫的时候就不要生成太多小文件呢?

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

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

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

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

    2 ) OSS 、七牛、又拍云等云存储方案(每月每 G 才几毛钱)
    yanzixuan
        17
    yanzixuan  
       Nov 22, 2016
    一般入 mongodb ,如果觉得喜欢文件的话,也可以使用 mongo 的文件存储。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2730 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 49ms · UTC 02:38 · PVG 10:38 · LAX 19:38 · JFK 22:38
    ♥ Do have faith in what you're doing.