好的,所以我有一个巨大的2.5G CSV文件,大约有25百万左右的记录,大约有20列。我正在尝试使用GO处理这个怪物并做一些格式化然后插入数据库。我有这个基本的代码设置与通道,因为我认为它将是最快的使用go例程,如下: here
问题在于它是阻塞的,我的频道刚刚收到大量数据的STUFFED,在我知道之前我的内存失控了。因此,在进行任何处理或插入之前,它都会失败。
有人可以帮我解决这个问题,看看我是否可以通过在处理和插入时读取文件来同时建立队列?
答案 0 :(得分:4)
对于您的大型CSV文件的每个记录,您都会启动一个新的goroutine。每个goroutine都分配~2kB
堆栈。不建议为所有事情开始使用goroutine。
尝试使用管道,主goroutine将读取记录并通过channel1
发送。
你开始,例如。处理从channel1
收到的记录的10名工作人员goroutine,并通过channel2
发送处理后的值。
然后其他一些10个goroutine将从channel2
接收值并将其插入数据库。
Here是管道的一些示例。