параллельная загрузка записей списка файлов с использованием python в БД - PullRequest
0 голосов
/ 27 сентября 2010

У меня есть список файлов, каждый файл имеет массу записей, разделяющихся на \ n, мне нужно обрабатывать эти записи параллельно и загружать их на какой-нибудь сервер sql, может кто-нибудь подсказать, как лучше всего это сделать с python

Ответы [ 2 ]

1 голос
/ 27 сентября 2010

Наилучшим способом может быть не загрузка в Parallell, а использование механизмов массового импорта SQL Server
например
BULK INSERT
bcp

РЕДАКТИРОВАТЬ:

Если вам нужно обработать их, то я часто использовал способ
1) массовая загрузка данных в промежуточную таблицу
2) Обработка данных в базе данных
3) Вставить в основные таблицы

Этапы 2 и 3 могут быть объединены, если обработка имеет разумный тип.

Это может быть быстрее, так как меньше обращений к серверу и обработкинабор данных, а не строка за строкой, обычно быстрее.

Кроме того, я считаю, что SQL-сервер будет использовать более одного ЦП для этой обработки, поэтому вы получите параллельную обработку бесплатно

0 голосов
/ 27 сентября 2010

Я бы использовал бассейн. Я привел пример. Для оптимальной пропускной способности вы захотите пакетировать ваши вставки в базу данных. Простой способ сделать это - обработать все ваши записи в python, а затем использовать инструмент 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()
...