提取并保存到数据库-时间与内存

时间:2018-06-30 12:31:25

标签: database mongodb algorithm julia

假设我的网址列表很长。现在,我需要编写一个脚本来执行以下操作-

  • 转到每个URL
  • 获取返回的数据
  • 并将其存储在数据库中

我知道这样做的两种方法-

  1. 从列表中弹出一个URL,下载数据并将其保存在数据库中。弹出下一个URL,下载数据并将其保存在数据库中,然后重复...

这将需要太多的磁盘写入,因此,另一种方法是

  1. 从每个URL下载数据并将其保存到内存中。最后,将其全部保存到一个磁盘中。

但这将需要在内存中携带大量数据。因此,有可能由于OOM错误而导致程序终止。

还有其他方法吗,这是这些方法之间的某种中间方法?

(特别是我正在Julia中编写此脚本并使用MongoDB

2 个答案:

答案 0 :(得分:1)

我们可以并发扩展@Trifon的解决方案。您可以同时运行两个线程:

  1. 从URL提取数据并将其存储在内存中的channel中的线程。
  2. 从通道读取并将数据写入磁盘的线程。

确保通道具有一定的有限容量,以防线程1被阻塞,以防连续的通道写入过多而线程2不消耗线程。

茱莉亚应该为parallel computing

提供良好的支持

答案 1 :(得分:0)

将结果批量写入数据库,例如每1000个URL。

此解决方案介于上述两种方式的1和2之间。