V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐学习书目
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
melonux
V2EX  ›  Python

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

  •  
  •   melonux · Mar 6, 2019 · 3330 views
    This topic created in 2609 days ago, the information mentioned may be changed or developed.
    比如我有一个爬虫,会下载很多新闻页面的原始 html。我目前是把他们保存在 mongodb 里了。但是当我要重新解析这些 html 文件的内容时,我用下述代码来执行解析时,发现从 mongodb 读取成为了瓶颈。每次只能返回 100-200 个 item,之后就要等个几秒再返回下一波。
    for i in db.collection.find({}):
    parse(i['html'])

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

    非常感谢。
    17 replies    2019-03-07 10:52:44 +08:00
    mingtiny11
        1
    mingtiny11  
       Mar 6, 2019
    随便啥 blob store 都可以呀
    ShangAliyun
        2
    ShangAliyun  
       Mar 6, 2019
    为啥不选择对象存储?
    lihongjie0209
        3
    lihongjie0209  
       Mar 6, 2019
    你这么写当然会卡了, 所有的时间话费在数据库 IO 上了, 用多线程
    melonux
        4
    melonux  
    OP
       Mar 6, 2019
    @lihongjie0209 我知道时间都是在 io 上的。问题在于,mongodb 返回数据太慢了。因为我把文件内容作为 json 的一个字段进行存储的。我要解决的就是如何更有效的存储,以便能快速大批量读取。
    melonux
        5
    melonux  
    OP
       Mar 6, 2019
    @mingtiny11 您指的 blob store 是什么? mysql 的 blob 字段吗?
    melonux
        6
    melonux  
    OP
       Mar 6, 2019
    @ShangAliyun 对象存储指的是什么?
    mingtiny11
        7
    mingtiny11  
       Mar 6, 2019
    @melonux 对象存储呀。
    mingtiny11
        8
    mingtiny11  
       Mar 6, 2019
    @melonux 各大云厂商的对象存储了解下
    melonux
        9
    melonux  
    OP
       Mar 6, 2019
    @mingtiny11 谢谢,我学习一下
    lihongjie0209
        10
    lihongjie0209  
       Mar 6, 2019
    @melonux IO 慢你就多线程啊,mogo 不至于就给一个线程就卡死了
    ShangAliyun
        11
    ShangAliyun  
       Mar 6, 2019
    @melonux 阿里云的叫 OSS,腾讯云的叫 COS,本质都是 Object Storage
    melonux
        12
    melonux  
    OP
       Mar 6, 2019
    @ShangAliyun 3Q,我刚看了阿里云的 OSS。存储好便宜啊,而且通过 ECS 访问还不收流量费。我明天试试看这个的读取速度有多快。
    melonux
        13
    melonux  
    OP
       Mar 6, 2019
    @lihongjie0209 好的。我也去试试多线程的读 mongodb。
    sunnyadamm
        14
    sunnyadamm  
       Mar 6, 2019 via Android
    楼上正解,我就不多说了
    billlee
        15
    billlee  
       Mar 6, 2019
    太小的文件也不适合对象存储吧,印象中腾讯云 object storage 的分块大小是 1MB. 如果访问的 pattern 允许,还是应该把小文件打包成大一点的
    julyclyde
        16
    julyclyde  
       Mar 7, 2019
    早几年大家都是套 XML
    现在改 JSON 了
    mingtiny11
        17
    mingtiny11  
       Mar 7, 2019
    @billlee 一般 object 存储底层都是把小文件拼成大文件的,不然怎么高性能。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1015 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 19:05 · PVG 03:05 · LAX 12:05 · JFK 15:05
    ♥ Do have faith in what you're doing.