Альтернативные драйверы Oracle для .NET

Я изменил свой оригинальный скрипт для развертывания на любом количестве процессоров. Это работало намного быстрее, так как я мог использовать несколько потоков и развертываться на AWS. Я использовал 96-ядерный компьютер, который выполнил задачу примерно за 8 часов. Я был очень удивлен, так как это почти линейное масштабирование! Идея состоит в том, чтобы сделать некоторые повторяющиеся задачи распространяемыми. После этого вы сможете назначать задачи процессору. Здесь распараллеливание выполняется командой pool.map().

Использование этого скрипта из командной строки довольно просто:

python3 transposer.py -i largeFile.tsv

вы можете указать и другие аргументы, если это необходимо.

import argparse, subprocess
import numpy as np
import pandas as pd
import dask.dataframe as dd
from IPython.display import clear_output
from contextlib import closing
from os import cpu_count
from multiprocessing import Pool

parser = argparse.ArgumentParser(description='Transpose csv')
parser.add_argument('-i', '--infile', help='Path to input folder',
                    default=None)
parser.add_argument('-s', '--sep', help='input separator',
                    default='\t')

args = parser.parse_args()
infile = args.infile
sep = args.sep    
df = pd.read_csv(infile, sep='\t', nrows=3)    

def READ_COL(item):
    print(item)
    outfile = 'outfile{}.temp'.format(item)
    if item !=0:
                x = "awk '{print $"+str(item)+"}' "+infile+" > "+outfile
                subprocess.check_call([x], shell=True)
                col = pd.read_csv(outfile)
                row = col.T
                display(row)
                row.to_csv('col_{:09d}.csv'.format(item), header=False)
                subprocess.check_call(['rm '+outfile], shell=True)
                print(item/len(df.columns))

with closing(Pool(processes=cpu_count())) as pool:
    pool.map(READ_COL, list(range(1, len(df.columns)+1)))
7
задан Treb 30 January 2009 в 15:28
поделиться

3 ответа

Существует пара различных разновидностей драйвера ODP.Net Oracle. Какую версию Вы пытаетесь использовать?

Это кажется на желание Oracle 11-граммовый ODAC 11.1.0.6.21 с Развертыванием Xcopy которое позволяет Вам развертывать Моментальный Клиент Oracle и драйвер ODP.Net только путем копирования нескольких DLLs и регистрации их. Это не требует полноценной клиентской установки Oracle.

8
ответ дан 6 December 2019 в 09:23
поделиться

Ваша задача может быть достигнута без потребности любого внешнего программного обеспечения:

  1. Установите Компоненты Доступа к данным Oracle 11 г в Вашем поле разработки. ODAC 11 г назад совместим с 9i и 10 г
  2. Добавьте ссылку на библиотеку ODAC в Ваших проектах.NET (Oracle.DataAccess.dll).
  3. Позвольте Вашему приложению соединяться без использования TNSNAMES.ORA. Для этого необходимо включать дескриптор подключения в строку подключения:

    "пользователь id=scott; password=tiger; источник данных =" +" (ОПИСАНИЕ = (ОБРАЩАЮТСЯ = (PROTOCOL=tcp)" +" (HOST=sales-server) (PORT=1521)) (CONNECT_DATA = "+" (SERVICE_NAME=sales.us.acme.com)))"

Так как Вы включаете дескриптор подключения в строку подключения, тонкий клиент не требуется в целенаправленных компьютерах.

Счастливое развертывание.

9
ответ дан 6 December 2019 в 09:23
поделиться

Клиентская Система библиотеки предприятия. Данные. OracleClient является жизнеспособной альтернативой поставщику ODP.NET от Oracle. Существует несколько протестов, которые необходимо знать, хотя, с помощью клиента Microsoft сделает чрезвычайно трудным работать с любым типом больших объектов, являются ли они строками XML, CLOBs, СВЕЧАМИ или БЛОБАМИ. Также столбец Oracle XmlType не поддерживается и должен быть литым к CLOB, который будет возвращен в OracleClient.

0
ответ дан 6 December 2019 в 09:23
поделиться
Другие вопросы по тегам:

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