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

Database 获取并保存到数据库-时间与内存,database,mongodb,algorithm,julia,Database,Mongodb,Algorithm,Julia,假设我有一个很长的URL列表。现在,我需要编写一个脚本来执行以下操作- 转到每个URL 获取返回的数据 并将其存储在数据库中 我知道两种方法- 从列表中弹出一个URL,下载数据并将其保存在数据库中。弹出下一个URL,下载数据并保存在数据库中,然后重复。。。 这将需要太多的磁盘写入,所以,另一种方法是 从每个URL下载数据并将其保存到内存中。最后,在一次磁盘写入中将其全部保存到数据库。 但这需要在内存中携带大量数据。所以程序有可能因为OOM错误而终止 有没有其他的方法,哪一种是这些方法之间的某种中

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

转到每个URL 获取返回的数据 并将其存储在数据库中 我知道两种方法-

从列表中弹出一个URL,下载数据并将其保存在数据库中。弹出下一个URL,下载数据并保存在数据库中,然后重复。。。 这将需要太多的磁盘写入,所以,另一种方法是

从每个URL下载数据并将其保存到内存中。最后,在一次磁盘写入中将其全部保存到数据库。 但这需要在内存中携带大量数据。所以程序有可能因为OOM错误而终止

有没有其他的方法,哪一种是这些方法之间的某种中介


特别是,我正在编写这个脚本,并使用

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


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

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

从URL获取数据并将其存储在内存中的一个线程。 从通道读取数据并将数据写入磁盘的线程。 确保通道具有一定的有界容量,以便在连续通道写入太多而线程2不使用它们的情况下阻塞线程1


朱莉娅应该对

有很好的支持,嗯,是什么让1000成为分部的好选择?什么参数应该控制批量大小?为什么这个问题被否决了?你对速度计时了吗?如果瓶颈在网络中(通常是这种情况),特别是如果您有SSD,则可能不太需要麻烦批处理等。请记住保持程序异步。