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

2016 年 11 月 20 日
 thekoc
还剩很多空间,但是 inode 空间已经不够了。是应该在格式化硬盘的时候就多分配一点 inode 空间呢,还是在设计爬虫的时候就不要生成太多小文件呢?

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

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

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

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

2 ) OSS 、七牛、又拍云等云存储方案(每月每 G 才几毛钱)
yanzixuan
2016 年 11 月 22 日
一般入 mongodb ,如果觉得喜欢文件的话,也可以使用 mongo 的文件存储。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/321793

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX