Python 使用sqlalchemy-瓶颈从XML提取并加载到Postgres
我需要将大量XML数据加载到postgres数据库中(每天超过1000万行)。当我使用sqlite时,一切都在本地发生得非常快。当我在本地使用postgres时,事情会变慢,而当我使用AWS EC2/RDS时,事情会变慢。下面是一些伪代码和基准测试。有什么线索导致瓶颈吗Python 使用sqlalchemy-瓶颈从XML提取并加载到Postgres,python,sqlite,postgresql,amazon-web-services,sqlalchemy,Python,Sqlite,Postgresql,Amazon Web Services,Sqlalchemy,我需要将大量XML数据加载到postgres数据库中(每天超过1000万行)。当我使用sqlite时,一切都在本地发生得非常快。当我在本地使用postgres时,事情会变慢,而当我使用AWS EC2/RDS时,事情会变慢。下面是一些伪代码和基准测试。有什么线索导致瓶颈吗 1 for observation in xml_data: 2 new_reading = Reading() 3 for attr_name, attr_value in observation.iteritems(
1 for observation in xml_data:
2 new_reading = Reading()
3 for attr_name, attr_value in observation.iteritems():
4 setattr(new_reading, attr_name, attr_val)
5 session.add(new_reading)
6 session.commit()
我使用的是Python 2.7.5、postgres 9.2.4、SQLAlchemy==0.9.6、psycopg2==2.5.3
- 本地,sqlite
- 第1-5行:13k读数/秒
- 第6行:9.8k行/秒
- 本地、博士后
- 第1-5行:13k读数/秒
- 第6行:5.7k行/秒
- AWS、RDS和博士后
- 第1-5行:5.1k读数/秒
- 第6行:1.1k行/秒
我不明白为什么我看到从sqlite到postgres的写入速度会降低,甚至更不明白为什么我的11英寸MBA比AWS m1.medium实例更快。ORM通常不是为批量插入而设计的。但似乎SQLAlchemy试图给你一些东西: 有一些专门的方法可以插入一整组行:
- 请您的DB
- 具有多行(例如,您可以将其插入1000 x 1000)
- (一次发送和解析INSERT,多次发送数据)