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

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

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

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

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

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

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

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

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

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

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

© 2021 V2EX