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 · 3626 次点击
    这是一个创建于 2944 天前的主题,其中的信息可能已经有所发展或是发生改变。
    还剩很多空间,但是 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 啊
    tumbzzc
        13
    tumbzzc  
       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 吧我记得
    ctrlaltdeletel
        15
    ctrlaltdeletel  
       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   ·   实用小工具   ·   3047 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 11:56 · PVG 19:56 · LAX 03:56 · JFK 06:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.