Сеансы Sqlalchemy и автобан

Я использую сервер автобана в Twisted для предоставления RPC API. Для некоторых вызовов требуются запросы к базе данных, и несколько клиентов могут быть подключены через веб-сокет к серверу.

Я использую SqlAlchemy ORM для доступа к базе данных.

Каковы плюсы и минусы двух следующих подходов к работе с сеансами SqlAlchemy.

  1. Создание и уничтожение сеанса для каждого вызова RPC
  2. Создайте один сеанс при запуске сервера и используйте его при каждом вызове RPC.

Что бы вы порекомендовали и почему? (склоняюсь к 2)


person Arthur B.    schedule 26.01.2014    source источник


Ответы (2)


Рекомендуемый способ доступа к базе данных на основе SQL из Twisted (и Autobahn) с такими базами данных, как PostgreSQL, Oracle или SQLite, будет twisted.enterprise.adbapi.

twisted.enterprise.adbapi будет выполнять запросы в фоновом пуле потоков, что необходимо, поскольку большинство драйверов баз данных блокируются.

Примечание: для PostgreSQL также существует собственный асинхронный неблокирующий драйвер: txpostgres.

Теперь, если вы поместите ORM, например SQLAlchemy, поверх собственного драйвера SQL, я не уверен, как это будет работать вместе (если вообще) с twisted.enterprise.adbapi.

Итак, из упомянутых вами вариантов

  1. Это не подходит, так как большинство драйверов блокируются (а RPC Autobahn работают в основном потоке = Twisted thread thread - и вы НЕ ДОЛЖНЫ его блокировать).
  2. При этом вам нужно поместить сеанс (ы) базы данных в фоновые потоки (опять же, чтобы не блокировать).

Также см. здесь.

person oberstet    schedule 26.01.2014

Если вы используете SQLAlchemy и Twisted вместе, рассмотрите возможность использования Alchimia вместо встроенного adbapi.

person Glyph    schedule 28.01.2014
comment
эх, без ОРМ мало что осталось - person Arthur B.; 28.01.2014