2010-09-27 40 views
0

我有一个文件列表,每个文件都有\ n划分的大量记录, 我需要并行处理这些记录并将它们上传到某个sql服务器 有人提供了一个想法什么是最好的方式来做到这一点python使用python并行上传文件列表的记录

回答

1

最好的办法可能不是平行上传,但使用SQL服务器批量导入mechanisims
例如
BULK INSERT
bcp

编辑:

如果需要对它们进行处理,然后我经常使用的方法是
1)批量数据加载到一个临时表
2)上处理数据数据库
3)插入主表

如果处理是合理的类型,则可以将阶段2和阶段3组合。

这可能会更快,因为有更少的往返服务器和处理一组数据,而不是逐行通常更快。

我也件事,SQL服务器将在这样的处理使用一个以上的CPU,所以你得到你的处理并行免费

+0

我需要从文件中处理每个记录,然后上传它,而不是将整个文件作为表批量插入 – AKM 2010-09-27 11:58:40

0

我会用一个游泳池。我提供了一个例子。为了获得最佳吞吐量,您需要将插入批处理到数据库。一个简单的方法是使用python处理所有记录,然后使用Mark评论中的BULK INSERT工具进行插入。如果你一次插入一个,它会变慢,因为你的程序必须等待网络往返于SQL服务器。

from multiprocessing import Pool 
import sys 

def worker(record): 
    print "Processing... %s" % (record) 


pool = Pool(processes=8) 
for record in sys.stdin: 
    pool.apply_async(worker, [record]) 

pool.close() 
pool.join()