svfat
@svfat
☺Нужен VPS? Два месяца бесплатно. Смотри профиль☺

SQLAlchemy, как правильно работать с большими таблицами?

В одном проекте использую SQLAlchemy для работы с БД. Глубоко в документацию не вникал, пробежался по верхам.

Возник вопрос со скоростью работы. Задача довольно проста - пробежаться по элементам питоновского list, найти соответсвующую ему строку в таблице - поменять в ней пару значений. Делаю примерно так (пробовал разные вариации):
for keyword in keys_list:
         result = s.query(MyTable).filter(MyTable.keyword == keyword).update({'a':a, 'b':b})


Мне представляется что время выполнения такого кода должно возрастать линейно с увеличением размера keys_list, однако судя по всему - это не так.

На тестовом сервере одна из таблиц БД небольшая, порядка 3000 строк. SQLAlchemy обрабатывает данные из нее с приемлемой скоростью хотя и не моментально, за несколько секунд. На продакшене же, количество строк около 300000, то есть, всего лишь в 100 раз больше. Я предполагал, что и скрипт будет работать в сто раз дольше, и это бы меня устроило. Однако время работы скрипта возросло как минимум в геометрической прогрессии, а может даже и еще на несколько порядков. Скорее всего, я что-то не понимаю или делаю не так - таблица-то не невероятно огромная.

Прошу помощи, как с этим справиться. Думаю, проще всего написать raw sql, но пока не хочу принципиально.
  • Вопрос задан
  • 649 просмотров
Решения вопроса 1
@SaertiS
Вы не учитываете накладные расходы на открытие/закрытие соединения. Напишите лучше хранимую процедуру в бд и вызывайте ее это будет намного быстрее.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@lPolar
data scientist
Что стоит сделать со стороны sqlalchemy:
1. Отключите autocommit во время поэлементного update.
2. Лучше разрезать таблицу на подсекции, которые обновляются, при необходимости delete подсекцию и дописывать новые данные через insert.
3. Заливайте данные через нативные библиотеки (для Oracle - cx_Oracle и т.д.)
sqalchemy хорош своим API, но из за его гибкости местами он очень медленный.
Какая бд у Вас?
Ответ написан
Ваш ответ на вопрос

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

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