Управление сессиями NHibernate?

Во-первых, позвольте мне дать краткое описание сценария. Я пишу простую игру, в которой почти вся работа выполняется на стороне сервера с тонким клиентом для доступа игроков. Игрок входит в систему или создает учетную запись, а затем может взаимодействовать с игрой, перемещаясь по сетке. Когда они входят в ячейку, они должны быть проинформированы о других игроках в этой ячейке, и аналогично, другие игроки в этой ячейке будут проинформированы о том, что этот игрок входит в нее. Существует множество других взаимодействий и действий, которые могут иметь место, но не стоит вдаваться в подробности о них, поскольку это просто больше того же самого. Когда игрок выходит из системы, а затем снова входит в систему или если сервер выключается и возвращается в рабочее состояние, все игровое состояние должно сохраняться, хотя в случае сбоя сервера не имеет значения, потерял ли я примерно 10 минут изменений.

Я решил использовать NHibernate и базу данных SQLite, поэтому я много читал о NHibernate, следуя учебным пособиям и написав несколько примеров приложений, и совершенно не понимаю, как мне поступить!

У меня такой вопрос: как лучше всего управлять своими сессиями? Только из небольшого количества, которое я понимаю, все эти возможности выскакивают у меня:

Have a single session that's always opened that all clients use Have a single session for each client that connects and periodically flush it Open a session every time I have to use any of the persisted entities and close it as soon as the update, insert, delete or query is complete Have a session for each client, but keep it disconnected and only reconnect it when I need to use it Same as above, but keep it connected and only disconnect it after a certain period of inactivity Keep the entities detached and only attach them every 10 minutes, say, to commit the changes

Какую стратегию я должен использовать, чтобы получить достойную производительность, учитывая, что может быть много обновлений, вставок, удалений и запросов в секунду от сотен клиентов одновременно, и все они должны быть согласованы друг с другом?

Еще один небольшой вопрос: как эффективно использовать транзакции? Это нормально для каждого отдельного изменения в его собственной транзакции, или это будет работать плохо, когда сотни клиентов пытаются изменить ячейки в сетке? Должен ли я попытаться выяснить, как объединить похожие обновления и поместить их в одну транзакцию, или это будет слишком сложно? Мне даже нужны транзакции для большей части?

Ответы на вопрос(4)

Ваш ответ на вопрос