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
yxy2829
V2EX  ›  Python

假设有一个爬虫,从网络上获取数据的频率快,本地写入数据的频率慢,使用什么数据结构好?

  •  
  •   yxy2829 · May 18, 2018 · 4886 views
    This topic created in 2901 days ago, the information mentioned may be changed or developed.
    面试遇到的问题
    16 replies    2018-05-21 13:30:20 +08:00
    xshwy
        1
    xshwy  
       May 18, 2018
    丢缓存慢慢写
    wuqiangroy
        2
    wuqiangroy  
       May 18, 2018
    中间加一个 redis
    Hopetree
        3
    Hopetree  
       May 18, 2018
    队列
    Ultraman
        4
    Ultraman  
       May 18, 2018 via Android
    如果不是面试的话……把获取数据的频率放慢点
    Luckyray
        5
    Luckyray  
       May 18, 2018 via iPhone
    数据结构差别不大吧……用最简单的数组?多加几个硬盘应该更好使
    zarte
        6
    zarte  
       May 18, 2018
    看获取到的数据量,如果多无解的,除非降低爬虫爬取速度。少可以缓存队列啥的。
    xiaol825
        7
    xiaol825  
       May 18, 2018
    如果进来的数据量远大于能写入的,队列只能缓解。还是要想办法优化数据写入的速度才行。
    q9REUgpVVCU77pWj
        8
    q9REUgpVVCU77pWj  
       May 18, 2018
    网络 IO 比本地 IO 快?还真没碰到过。一般都爬取的时候多开点,扔队列里慢慢写倒是有的。
    Leigg
        9
    Leigg  
       May 18, 2018 via Android
    保存到数据库,开多线程写。
    关数据结构什么事?
    goreliu
        10
    goreliu  
       May 18, 2018 via Android
    意思应该是这样,比如从网络上获取每一千份数据,写入一次本地数据,所以前者频率更高。可以使用双 buffer,一个满后,切换 buffer,将满的写入硬盘后清空,这样互不干扰。具体 buffer 是数组、队列还是更复杂的结构,要看具体数据格式。
    tabris17
        11
    tabris17  
       May 18, 2018
    究竟是频率还是效率

    如果是频率的话,实在看不出两者有什么相互影响的关联
    337136897
        12
    337136897  
       May 19, 2018
    多买点固态硬盘
    jssyxzy
        13
    jssyxzy  
       May 19, 2018
    message queue
    写多开几个线程.
    jssyxzy
        14
    jssyxzy  
       May 19, 2018
    说错了,
    没看清楚,如果写比较慢,如果不管也可以实时写;
    不过估计题主的意思是写的放在一起写, 那可以做一个 batch 写,每个一段时间写;其他时间写线程休眠即可.
    gabon
        15
    gabon  
       May 20, 2018 via Android
    生产者消费者模型,blockingqueue,redis 缓存,kafka 队列,要不加内存,要不加硬盘
    Nick2VIPUser
        16
    Nick2VIPUser  
       May 21, 2018
    是否可以这样理解这个题目:
    有一个爬虫,本地采用数据结构 A 存数据,
    由于从网络上获取数据的频率快,本地写入数据的频率慢,这里做一个假设:
    十秒钟获取 1000 条数据,但是十秒钟才能插入一次数据这样的频率,
    因此,在插入数据之前,这 1000 条数据采用数据结构 B 来保存
    意味着必须批量插入到本地的数据结构 A 中,
    试着思考一下这个需求:用什么数据结构好,也就是 A 和 B 应该是什么数据结构呢,什么数据结构实现了这种场景下最优时间复杂度和空间复杂度?


    这个题目还真不好理解...
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1014 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 59ms · UTC 19:04 · PVG 03:04 · LAX 12:04 · JFK 15:04
    ♥ Do have faith in what you're doing.