Организация параллельных запросов

Доброе время суток. Помогите пожалуйста с задачей. Условия такие:
1. Система «черный ящик» пишет в MS SQL Server данные, данных от 2 до 4 млн. записей ежедневно. Разработчики «черного ящика» предусмотрели, что сервис пишет каждый день в новую таблицу с именами: «table-2013-02-01», «table-2013-02-02», «table-2013-02-03»… и так далее.
2. Для поиска я написал простой скрипт в python с использование Pyodbc, в котором вводные данные: период с такого то числа, по такое, и что искать по какому полю. Сейчас скрипт выполняется в цикле (или с использованием «map») где в запросе меняется имя таблицы. А результаты добавляются в список.
3. Как мне в python распараллелить запрос, например, по 30 запросов за раз (к 30 таблицам) к базе?

P.S. В связи с малым опытом работы с Python, пытался использовать PP (Parallel Python), по аналогии:
f('name_table') — функция принимает имя таблицы, возвращает список.
period = ('table-2013-02-01','table-2013-02-02',...)
jobs = [job_server.submit(f,(input,), (,), («pyodbc»,)) for input in period]
for job in jobs:
job()
Но видимо использую не по месту, да и «вылавливаю» постоянно ошибку аля «unpickle»…
  • Вопрос задан
  • 6070 просмотров
Решения вопроса 1
@gelas
А почему бы не переложить задачу на SQL Server сделав например union all 30-ти таблиц?
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@alz
Если у вас большой простой по i/o, то наверное можно распараллелиться на обычных потоках
Ответ написан
Комментировать
MrFrizzy
@MrFrizzy
Попробуйте присмотерться к библиотеке multiprocessing, я использую с python 2.7
from multiprocessing import Pool
import os

def main():
	pool = Pool(os.sysconf('SC_NPROCESSORS_ONLN'))
	result = pool.map(f, range(10))

def f(x):
	return x*x


почти стандартный пример.
Я похожим образом параллелю простые действия по ssh на разных машинах, когда нет доступа к puppet.
Правда, в вашем случае все может уперется в скорость чтения из одной базы, но несколько параллельных запросов должна держать…
Ответ написан
Комментировать
foxmuldercp
@foxmuldercp
Системный администратор, программист, фотограф
Я бы еще подумал о том, что старые закрытые по датам таблицы можно выносить в БД, например, на другой машине, и делать запросы там + основной сервер, если надо текущий день.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы