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

2018-05-18 17:50:24 +08:00
 yxy2829
面试遇到的问题
4314 次点击
所在节点    Python
16 条回复
xshwy
2018-05-18 17:52:48 +08:00
丢缓存慢慢写
wuqiangroy
2018-05-18 17:58:49 +08:00
中间加一个 redis
Hopetree
2018-05-18 18:05:00 +08:00
队列
Ultraman
2018-05-18 18:25:27 +08:00
如果不是面试的话……把获取数据的频率放慢点
Luckyray
2018-05-18 18:26:59 +08:00
数据结构差别不大吧……用最简单的数组?多加几个硬盘应该更好使
zarte
2018-05-18 18:28:20 +08:00
看获取到的数据量,如果多无解的,除非降低爬虫爬取速度。少可以缓存队列啥的。
xiaol825
2018-05-18 22:45:25 +08:00
如果进来的数据量远大于能写入的,队列只能缓解。还是要想办法优化数据写入的速度才行。
q9REUgpVVCU77pWj
2018-05-18 22:55:06 +08:00
网络 IO 比本地 IO 快?还真没碰到过。一般都爬取的时候多开点,扔队列里慢慢写倒是有的。
Leigg
2018-05-18 23:08:37 +08:00
保存到数据库,开多线程写。
关数据结构什么事?
goreliu
2018-05-18 23:13:18 +08:00
意思应该是这样,比如从网络上获取每一千份数据,写入一次本地数据,所以前者频率更高。可以使用双 buffer,一个满后,切换 buffer,将满的写入硬盘后清空,这样互不干扰。具体 buffer 是数组、队列还是更复杂的结构,要看具体数据格式。
tabris17
2018-05-18 23:13:36 +08:00
究竟是频率还是效率

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


这个题目还真不好理解...

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

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

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

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

© 2021 V2EX