У меня есть база данных в Oracle.Мне нужно экспортировать некоторые данные, обработать их и сохранить данные в файл.В таблице есть oracle sdo_geom , и мне нужно преобразовать геометрию в формат WKT .Геометрия действительно большая, большие полигоны с тысячами вершин.Я использую функцию SDO_UTIL.TO_WKTGEOMETRY () , но это занимает слишком много времени.Выбор (преобразование геометрии) в базу данных является узким местом в этом случае.
Я думаю о многопоточности или многопроцессорности в Python.Сценарий должен выглядеть примерно так:
- Создать соединение с базой данных
- Создать cx_Oracle.cursor
- Затем запустить несколько потоков или процессов, совместно использующих курсор
- В каждом потоке (или процессе) я буду выбирать данные из базы данных (той же таблицы) по блокам
- Затем все данные будут отправляться потоку или процессу, ответственному за обработку данных исохранение в файл
Я выбираю данные, используя fetchmany()
через чанки:
def get_row_chunks(self):
while True:
rows = self.cursor.fetchmany()
if not rows:
break
yield rows
Поэтому мой вопрос, возможно ли решить эту проблему, используямногопоточность или многопроцессорность и как (используя cx_Oracle ) или psycopg2 для PostgreSQL Я думаю, это не имеет значения.Я думаю, что курсор в этих библиотеках ведет себя одинаково.Или это не возможно легко разделить курсор между потоками или процессами.
Возможным решением будет переопределение геометрии WKT в базе данных, но это выглядит для меня более общим решением.