如何有效的存储大批量小文件,并支持未来批量的读取这些文件内容?

2019-03-06 19:06:05 +08:00
 melonux
比如我有一个爬虫,会下载很多新闻页面的原始 html。我目前是把他们保存在 mongodb 里了。但是当我要重新解析这些 html 文件的内容时,我用下述代码来执行解析时,发现从 mongodb 读取成为了瓶颈。每次只能返回 100-200 个 item,之后就要等个几秒再返回下一波。
for i in db.collection.find({}):
parse(i['html'])

我想知道有什么系统,可以方便的存储这些小文件(一般都小于 1MB ),而又能提供较高的批量读取吞吐量。

非常感谢。
2715 次点击
所在节点    Python
17 条回复
mingtiny11
2019-03-06 19:40:28 +08:00
随便啥 blob store 都可以呀
ShangAliyun
2019-03-06 19:46:03 +08:00
为啥不选择对象存储?
lihongjie0209
2019-03-06 19:52:14 +08:00
你这么写当然会卡了, 所有的时间话费在数据库 IO 上了, 用多线程
melonux
2019-03-06 19:59:28 +08:00
@lihongjie0209 我知道时间都是在 io 上的。问题在于,mongodb 返回数据太慢了。因为我把文件内容作为 json 的一个字段进行存储的。我要解决的就是如何更有效的存储,以便能快速大批量读取。
melonux
2019-03-06 20:00:15 +08:00
@mingtiny11 您指的 blob store 是什么? mysql 的 blob 字段吗?
melonux
2019-03-06 20:01:13 +08:00
@ShangAliyun 对象存储指的是什么?
mingtiny11
2019-03-06 20:02:55 +08:00
@melonux 对象存储呀。
mingtiny11
2019-03-06 20:03:28 +08:00
@melonux 各大云厂商的对象存储了解下
melonux
2019-03-06 20:12:38 +08:00
@mingtiny11 谢谢,我学习一下
lihongjie0209
2019-03-06 20:14:08 +08:00
@melonux IO 慢你就多线程啊,mogo 不至于就给一个线程就卡死了
ShangAliyun
2019-03-06 20:38:27 +08:00
@melonux 阿里云的叫 OSS,腾讯云的叫 COS,本质都是 Object Storage
melonux
2019-03-06 20:48:49 +08:00
@ShangAliyun 3Q,我刚看了阿里云的 OSS。存储好便宜啊,而且通过 ECS 访问还不收流量费。我明天试试看这个的读取速度有多快。
melonux
2019-03-06 20:49:40 +08:00
@lihongjie0209 好的。我也去试试多线程的读 mongodb。
sunnyadamm
2019-03-06 21:13:48 +08:00
楼上正解,我就不多说了
billlee
2019-03-06 22:52:30 +08:00
太小的文件也不适合对象存储吧,印象中腾讯云 object storage 的分块大小是 1MB. 如果访问的 pattern 允许,还是应该把小文件打包成大一点的
julyclyde
2019-03-07 09:07:52 +08:00
早几年大家都是套 XML
现在改 JSON 了
mingtiny11
2019-03-07 10:52:44 +08:00
@billlee 一般 object 存储底层都是把小文件拼成大文件的,不然怎么高性能。

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

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

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

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

© 2021 V2EX