NHibernate и паттерн Unit of Work на игровом сервере с постоянными подключениями пользователей

NHibernate с шаблоном Unit of Work лучше всего подходит для HTTP-решений, но у моего сервера есть постоянно подключенные пользователи, и эффективно хранить все их данные в памяти.

С объектами, отсоединенными от сеанса, я не могу использовать ленивую загрузку, и многие функции NHibernate также предполагают, что я буду использовать шаблон Unit of Work.

Предлагает ли NHibernate какие-либо хорошие решения для работы с объектами, отсоединенными от сеанса?

Слияние здесь не годится, потому что это та же избыточная загрузка данных (даже из кеша). Или мне следует использовать другие решения вместо NHibernate для такого типа серверов? Есть хорошие ORM?


person Vlad    schedule 13.05.2014    source источник


Ответы (1)


Вы можете присоединить к сеансу отсоединенный объект, см. http://rmfusion.com/open_source/nhibernate/nhibernate_net_object_persistence.htm

здесь сказал

путем повторного присоединения объекта к новому Persistent Manager (ISession). Затем состояние объекта будет снова синхронизировано с базой данных в конце транзакции.

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

Кроме того, я рекомендую вам, если ленивая загрузка не работает для вас, просмотреть базу данных, просмотреть схему и сначала изучить БД, чем модель. (Думая о производительности) возможно, вы можете нормализовать-денормировать таблицы

person Math    schedule 15.05.2014
comment
Затем состояние объекта будет снова синхронизировано с базой данных, что означает именно то, чего я не хочу: снова читать те же данные из кеша или даже извлекать их из базы данных. Что я хочу: я извлекаю экземпляр пользователя и помещаю его в словарь или в другое место, я изменяю его позже, когда захочу, и сохраняю его (только измененные свойства) без получения каких-либо данных. Кроме того, я не могу использовать ленивую загрузку не из-за плохой оптимизации, а потому, что мои объекты отсоединены от сеанса. - person Vlad; 16.05.2014