首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
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
拉钩
V2EX  ›  Python

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

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

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

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

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

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

    2 ) OSS 、七牛、又拍云等云存储方案(每月每 G 才几毛钱)
        17
    yanzixuan   2016-11-22 14:42:44 +08:00
    一般入 mongodb ,如果觉得喜欢文件的话,也可以使用 mongo 的文件存储。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3704 人在线   最高记录 4019   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 19ms · UTC 05:56 · PVG 13:56 · LAX 21:56 · JFK 00:56
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1