Как эффективно взаимодействовать с другой базой данных с помощью Python - PullRequest
1 голос
/ 15 сентября 2011

У меня есть приложение, которое должно взаимодействовать с базой данных другого приложения. У меня есть доступ на чтение, но я не пишу.

В настоящее время я использую операторы sql через pyodbc для захвата строк и использую python для манипулирования данными. Поскольку я ничего не кеширую, это может быть довольно дорого.

Я думаю об использовании ORM для решения моей проблемы. Вопрос в том, что если я использую ORM, такой как «sql alchemy», будет ли он достаточно умен, чтобы получать изменения в другой базе данных?

например. sql alchemy получает доступ к таблице и получает строку. Если бы этот ряд был изменен вне sql alchemy, было бы достаточно умен, чтобы поднять его?

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Редактировать: Для большей ясности

У меня есть одно приложение, которое просто представляет собой средство отчетности, которое позволяет вызывать приложение A.

У меня есть другое приложение, которое обрабатывает различные финансовые транзакции, которое называется Приложение B.

A имеет доступ к базе данных B для получения транзакций и создания различных отчетов. Там сотни тысяч транзакций. В настоящее время мы кэшируем эту информацию вручную в python, и если нам нужен обновленный отчет, мы обновляем кеш. Если мы избавимся от кеша, sql-запросы в сочетании с вычислениями станут не масштабируемыми.

1 Ответ

2 голосов
/ 15 сентября 2011

Я не думаю, что ORM - это решение вашей проблемы с производительностью.По умолчанию ORM, как правило, менее эффективны, чем строки SQL, потому что они могут извлекать данные, которые вы не собираетесь использовать (например, делать SELECT *, когда вам нужно только одно поле), хотя SQLAlchemy позволяет детально контролировать SQLГенерируемый.

Теперь для реализации механизма кэширования, в зависимости от вашего приложения, вы можете использовать простой словарь в памяти или специализированную систему, такую ​​как memcached или Redis.

Чтобы сохранить ваши кэшированные данные относительноКроме того, вы можете опрашивать источник через регулярные промежутки времени, что может быть хорошо, если ваше приложение может выдержать небольшую задержку.В противном случае вам понадобится приложение, у которого есть доступ на запись в базу данных, чтобы уведомить ваше приложение или вашу систему кеша об обновлении.

Редактировать: так как вы, кажется, имеете контроль над приложением B, и вы ужеЕсли в приложении A есть система кеширования, самый простой способ решить вашу проблему - создать обратный вызов в приложении A, который приложение B может вызывать для истечения срока действия кэшированных элементов.Оба приложения должны согласовать соглашение для идентификации кэшированных элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...