MMO Server - Оптимизация доступа к базе данных для данных о состоянии пользователя - PullRequest
3 голосов
/ 12 августа 2011

Я пишу MMO-сервер, используя следующие технологии и языки: .Net Framework 4, C #, SQL Server 2008 R2, Модель данных объекта, LINQ.

У меня есть вопрос относительно того, как и когдадоступ к постоянному хранилищу (SQL Server) для данных о состоянии пользователя для повышения производительности сервера.

Раньше, когда пользователь заходил на сервер MMO, вы загружали все пользовательские данные в оперативную память для быстрого доступа на чтение / запись в течение всего времени существования пользовательского соединения.Когда пользователь выходит из системы с сервера, эти данные сохраняются в базе данных.

С появлением модели данных сущностей и связанного с ней кэширования требуется ли этот метод больше?Когда следует Context.SaveChanges ();Вам позвонят, если это так?

Буду признателен за любые рекомендации относительно моего вопроса.Спасибо.

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: Я не думаю, что кто-либо рассматривает возможность кэширования .NET Entity Model.Насколько я понимаю, модель .NET Entity Database выполняет кэширование для вас, и, следовательно, запросы не всегда выполняются к реальной базе данных, а вместо этого к данным в оперативной памяти.Поэтому, с моей точки зрения, мне не нужно различать доступ к данным в ОЗУ и доступ к базе данных.Это правильное предположение?

Ответы [ 2 ]

2 голосов
/ 12 августа 2011

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

1 голос
/ 12 августа 2011

Что ж, если вам нужна производительность, вы можете использовать пул серверов с memcached.

Как только пользователь подключается, вы загружаете всю информацию о нем в кэш, у вас периодически сбрасывается демонотправьте его в базу данных и обновите данные в memcache.

Вы всегда будете иметь лучшую производительность для данных в ОЗУ, чем в БД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...