1
xshwy 2018-05-18 17:52:48 +08:00
丢缓存慢慢写
|
2
wuqiangroy 2018-05-18 17:58:49 +08:00
中间加一个 redis
|
3
Hopetree 2018-05-18 18:05:00 +08:00
队列
|
4
Ultraman 2018-05-18 18:25:27 +08:00 via Android
如果不是面试的话……把获取数据的频率放慢点
|
5
Luckyray 2018-05-18 18:26:59 +08:00 via iPhone
数据结构差别不大吧……用最简单的数组?多加几个硬盘应该更好使
|
6
zarte 2018-05-18 18:28:20 +08:00
看获取到的数据量,如果多无解的,除非降低爬虫爬取速度。少可以缓存队列啥的。
|
7
xiaol825 2018-05-18 22:45:25 +08:00
如果进来的数据量远大于能写入的,队列只能缓解。还是要想办法优化数据写入的速度才行。
|
8
q9REUgpVVCU77pWj 2018-05-18 22:55:06 +08:00
网络 IO 比本地 IO 快?还真没碰到过。一般都爬取的时候多开点,扔队列里慢慢写倒是有的。
|
9
Leigg 2018-05-18 23:08:37 +08:00 via Android
保存到数据库,开多线程写。
关数据结构什么事? |
10
goreliu 2018-05-18 23:13:18 +08:00 via Android
意思应该是这样,比如从网络上获取每一千份数据,写入一次本地数据,所以前者频率更高。可以使用双 buffer,一个满后,切换 buffer,将满的写入硬盘后清空,这样互不干扰。具体 buffer 是数组、队列还是更复杂的结构,要看具体数据格式。
|
11
tabris17 2018-05-18 23:13:36 +08:00
究竟是频率还是效率
如果是频率的话,实在看不出两者有什么相互影响的关联 |
12
337136897 2018-05-19 12:09:50 +08:00
多买点固态硬盘
|
13
jssyxzy 2018-05-19 14:38:24 +08:00
message queue
写多开几个线程. |
14
jssyxzy 2018-05-19 14:40:08 +08:00
说错了,
没看清楚,如果写比较慢,如果不管也可以实时写; 不过估计题主的意思是写的放在一起写, 那可以做一个 batch 写,每个一段时间写;其他时间写线程休眠即可. |
15
gabon 2018-05-20 00:04:28 +08:00 via Android
生产者消费者模型,blockingqueue,redis 缓存,kafka 队列,要不加内存,要不加硬盘
|
16
Nick2VIPUser 2018-05-21 13:30:20 +08:00
是否可以这样理解这个题目:
有一个爬虫,本地采用数据结构 A 存数据, 由于从网络上获取数据的频率快,本地写入数据的频率慢,这里做一个假设: 十秒钟获取 1000 条数据,但是十秒钟才能插入一次数据这样的频率, 因此,在插入数据之前,这 1000 条数据采用数据结构 B 来保存 意味着必须批量插入到本地的数据结构 A 中, 试着思考一下这个需求:用什么数据结构好,也就是 A 和 B 应该是什么数据结构呢,什么数据结构实现了这种场景下最优时间复杂度和空间复杂度? 这个题目还真不好理解... |