V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
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 · 2018-05-18 17:50:24 +08:00 · 4288 次点击
    这是一个创建于 2141 天前的主题,其中的信息可能已经有所发展或是发生改变。
    面试遇到的问题
    16 条回复    2018-05-21 13:30:20 +08:00
    xshwy
        1
    xshwy  
       2018-05-18 17:52:48 +08:00
    丢缓存慢慢写
    wuqiangroy
        2
    wuqiangroy  
       2018-05-18 17:58:49 +08:00
    中间加一个 redis
    Hopetree
        3
    Hopetree  
       2018-05-18 18:05:00 +08:00
    队列
    Ultraman
        4
    Ultraman  
       2018-05-18 18:25:27 +08:00 via Android
    如果不是面试的话……把获取数据的频率放慢点
    Luckyray
        5
    Luckyray  
       2018-05-18 18:26:59 +08:00 via iPhone
    数据结构差别不大吧……用最简单的数组?多加几个硬盘应该更好使
    zarte
        6
    zarte  
       2018-05-18 18:28:20 +08:00
    看获取到的数据量,如果多无解的,除非降低爬虫爬取速度。少可以缓存队列啥的。
    xiaol825
        7
    xiaol825  
       2018-05-18 22:45:25 +08:00
    如果进来的数据量远大于能写入的,队列只能缓解。还是要想办法优化数据写入的速度才行。
    q9REUgpVVCU77pWj
        8
    q9REUgpVVCU77pWj  
       2018-05-18 22:55:06 +08:00
    网络 IO 比本地 IO 快?还真没碰到过。一般都爬取的时候多开点,扔队列里慢慢写倒是有的。
    Leigg
        9
    Leigg  
       2018-05-18 23:08:37 +08:00 via Android
    保存到数据库,开多线程写。
    关数据结构什么事?
    goreliu
        10
    goreliu  
       2018-05-18 23:13:18 +08:00 via Android
    意思应该是这样,比如从网络上获取每一千份数据,写入一次本地数据,所以前者频率更高。可以使用双 buffer,一个满后,切换 buffer,将满的写入硬盘后清空,这样互不干扰。具体 buffer 是数组、队列还是更复杂的结构,要看具体数据格式。
    tabris17
        11
    tabris17  
       2018-05-18 23:13:36 +08:00
    究竟是频率还是效率

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


    这个题目还真不好理解...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2680 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 15:48 · PVG 23:48 · LAX 08:48 · JFK 11:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.