推荐学习书目
› 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 · 4665 views
    This topic created in 3640 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
    cdwyd
    Nov 20, 2016 via Android❤️1
    1
    每个回答放在一行,或者入库
    billlee
    billlee
    Nov 20, 2016❤️1
    2
    你听说过数据库吗?
    thekoc
    thekoc
    OP
    Nov 20, 2016
    3
    @billlee 听说过……觉得项目小就没有用。这种情况还是要用比较好么?
    thekoc
    thekoc
    OP
    Nov 20, 2016
    4
    看了一下 sqlite ,准备用它了。
    billlee
    billlee
    Nov 20, 2016❤️2
    5
    @thekoc 是啊, ext 文件系统的设计不适合存放大量小文件, btrfs 也许可以。
    但一个文件还会有用户权限修改时间什么的很多元数据,开销很大。打开文件的时候还要占用文件描述符。
    你用个简单的 SQLite 数据库也比直接创建文件好。
    em70
    em70
    Nov 20, 2016 via iPhone❤️1
    6
    本来就是玩,你就尽量折腾呗,各种方法都试试,多好的提高机会啊
    bazingaterry
    bazingaterry
    Nov 20, 2016❤️1
    7
    @thekoc 都用数据库了,干脆就 MySQL 吧。
    onlyice
    onlyice
    Nov 20, 2016 via Android❤️1
    8
    感觉楼上说的解决办法都对,但是没有解答这个基本问题:为什么放文件会比放数据库更占用磁盘空间?

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

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

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

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