вопрос идентификации карты sqlalchemy - PullRequest
4 голосов
/ 03 мая 2011

Карта идентичности и шаблоны единиц работы являются одной из причин, по которым sqlalchemy гораздо привлекательнее django.db. Однако я не уверен, как будет работать карта идентификации или если она работает, когда приложение настроено как wsgi и доступ к orm осуществляется напрямую через вызовы API, а не через общую службу. Я бы предположил, что apache будет создавать новый поток с собственным экземпляром Python для каждого запроса. Поэтому каждый экземпляр будет иметь свой собственный экземпляр классов sqlalchemy и не сможет использовать карту идентичности. Это правильно?

Ответы [ 2 ]

6 голосов
/ 03 мая 2011

Я думаю, вы неправильно поняли шаблон карты личности.

От: http://martinfowler.com/eaaCatalog/identityMap.html

Карта идентичности ведет учет всех объекты, которые были прочитаны из база данных в одном бизнесе сделка.

Записи хранятся в карте идентификации для отдельной бизнес-транзакции . Это означает, что независимо от того, как настроен ваш веб-сервер, вы, вероятно, не будете держать их дольше, чем запрос (или не сохраните их в сеансе).

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

0 голосов
/ 03 мая 2011

Так что все зависит от того, как вы настроили соединение sqlalchemy.Обычно вы управляете каждым wsgi-запросом, чтобы иметь свой собственный локальный сеанс потока.Эта сессия будет знать обо всех событиях, добавленных / измененных / и т.д.Однако каждый поток не знает о других.Таким образом, загрузка / предварительная настройка моделей и сопоставлений распределяется во время запуска, однако каждый запрос может работать независимо от других.

...