Вопрос идентификации карты sqlalchemy
Карта идентичности и шаблоны единиц работы являются одной из причин, по которым sqlalchemy гораздо привлекательнее django.db. Однако я не уверен, как будет работать карта идентификации или если она работает, когда приложение настроено как wsgi и доступ к orm осуществляется напрямую через вызовы API, а не через общую службу. Я полагаю, что apache будет создавать новый поток с собственным экземпляром Python для каждого запроса. Поэтому каждый экземпляр будет иметь свой собственный экземпляр классов sqlalchemy и не сможет использовать карту идентичности. Это правильно?
2 ответа
Я думаю, вы неправильно поняли шаблон карты личности.
От: http://martinfowler.com/eaaCatalog/identityMap.html
Карта идентификации хранит записи обо всех объектах, которые были считаны из базы данных в одной бизнес-транзакции.
Записи хранятся в карте идентификации для одной бизнес-транзакции. Это означает, что независимо от того, как настроен ваш веб-сервер, вы, вероятно, не будете хранить их дольше, чем запрос (или сохраните их в сеансе).
Обычно у вас не будет большого количества пользователей, принимающих участие в одном деловом переходе. В любом случае, вы, вероятно, не хотите, чтобы ваши пользователи обменивались объектами, поскольку они могут в конечном итоге делать противоречивые вещи.
Так что все зависит от того, как вы настроили соединение sqlalchemy. Обычно вы управляете каждым wsgi-запросом, чтобы иметь свой собственный локальный сеанс потока. Эта сессия будет знать обо всех событиях, добавленных / измененных / и т.д. Однако каждый поток не знает о других. Таким образом, загрузка / предварительная настройка моделей и сопоставлений распределяется во время запуска, однако каждый запрос может работать независимо от других.