在多个核心之间分布查询(PostgreSQL 9.3)
Distribute Query among more than one core (PostgreSQL 9.3)
有一个处理大文件 (~1GB) 的 paython 脚本,然后将其内容插入到 PostgreSQL 数据库 9.3 中,所有这些都在一个连接中完成。这个过程需要很长时间,所以我想将这个问题分配给多个核心(我有 8 个核心),但从我读过的内容来看,这似乎是不可能的。知道是否有解决方法吗?
我的一段代码:
import psycopg2 as psycopg
try:
connectStr = "dbname='postgis20' user='postgres' password='' host='localhost'"
cx = psycopg.connect(connectStr)
cu = cx.cursor()
logging.info("connected to DB")
except:
logging.error("could not connect to the database")
global cx
try:
cu.execute("INSERT INTO taxi (userid,carNum) SELECT '"+str(msg['UserID'])+"',"+str(msg['CarNumber']))
cu.execute
cu.execute
cu.execute
cu.execute
..
..
..
.
except Exception, err:
print('ERROR: %s\n' % str(err))
cx.commit()
cx.commit()
并行化您的 python 程序不会改变这样一个事实,即您将一行接一行地插入到同一个记录的 table 中(每次都放置和删除锁并禁止缩放)。
将数据批量插入 postgresql 是一个经典主题:将数据批量导入 postgresql 的最佳方法是使用 COPY 命令(即使您在 python 程序中,您应该使用这个 postgresql 命令)。
postgresql.org 站点在 how to optimize your import. You should also read this SO answer on the same subject 上有一个页面。
有一个处理大文件 (~1GB) 的 paython 脚本,然后将其内容插入到 PostgreSQL 数据库 9.3 中,所有这些都在一个连接中完成。这个过程需要很长时间,所以我想将这个问题分配给多个核心(我有 8 个核心),但从我读过的内容来看,这似乎是不可能的。知道是否有解决方法吗?
我的一段代码:
import psycopg2 as psycopg
try:
connectStr = "dbname='postgis20' user='postgres' password='' host='localhost'"
cx = psycopg.connect(connectStr)
cu = cx.cursor()
logging.info("connected to DB")
except:
logging.error("could not connect to the database")
global cx
try:
cu.execute("INSERT INTO taxi (userid,carNum) SELECT '"+str(msg['UserID'])+"',"+str(msg['CarNumber']))
cu.execute
cu.execute
cu.execute
cu.execute
..
..
..
.
except Exception, err:
print('ERROR: %s\n' % str(err))
cx.commit()
cx.commit()
并行化您的 python 程序不会改变这样一个事实,即您将一行接一行地插入到同一个记录的 table 中(每次都放置和删除锁并禁止缩放)。
将数据批量插入 postgresql 是一个经典主题:将数据批量导入 postgresql 的最佳方法是使用 COPY 命令(即使您在 python 程序中,您应该使用这个 postgresql 命令)。
postgresql.org 站点在 how to optimize your import. You should also read this SO answer on the same subject 上有一个页面。