我有大约164列x50000行的大型csv文件,希望将这些文件导入PostgreSQl数据库(12.2)
我使用Django3.0.7和Python3.6.8创建了一个模型DataRow
,每个列有一个字段。导入文件时,我首先通过检查缺少的值等来验证它。然后,我为每一行创建一个DataRow
-对象,并尝试使用bulk_create
将所有内容加载到数据库中。下面是我的代码的样式化简短版本:
import pandas as pd
data = pd.read_csv(myfile)
validate_my_data(data)
data_row_objects = []
for row in data:
data_row_objects.append(DataRow(**row_to_dict(row)))
DataRow.objects.bulk_create(data_row_objects, batch_size=3000)
到目前为止,它是有效的。验证所有对象并将其附加到data_row_objects
大约需要8秒,这是正常的。但是,bulk_create-语句大约需要3分钟,这是不可接受的
那么,我该如何改进这里的性能呢?我已经尝试过增加/减少batch_size
,但3000似乎是迄今为止最稳定的大小
我还读过stackoverflow上的一些帖子,其中提到将csv文件直接导入数据库要快得多。然而,我宁愿使用纯django,因为我认为这正是django的目的之一:避免与数据库直接通信
或者我必须更改PostgreSQL的设置吗?由于django和PostgreSQL都在一个单独的docker容器中,所以速度可能会慢一些
老实说,我很难区分这里的性能瓶颈,因为我还是django和数据库的初学者。但我认为必须有一种快速而优雅的方法,因为我的数据集并没有那么大,导入这样的文件应该是一项非常常见的任务
期待您的回答, 汤姆
目前没有回答
相关问题 更多 >
编程相关推荐