Показать сообщение отдельно
Старый 13.05.2011, 22:19   #19
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Сетевая часть ММО игр

1/2. Вообще доступ к БД, должен выполнятся редко. И может быть с разных потоков. Логика по сути не должна к БД относиться вообще, т.к. её задача - обработка логики.
Менеджер информации, должен отвечать за то что должно быть загружено в ОЗУ, а что нет. Логика работает с данными из ОЗУ, значит они должны быть загружены. Например вещи выставленные на аукцион - должны быть в ОЗУ. При их покупке и т.п. естественно обновлять БД и т.п. Но не выгружать из ОЗУ.
Тут важно понимать, что должно использовать данные и от куда.
По идее, бд - лишь для хранения данных, но никак не для логики и т.п. Всё должно быть в ОЗУ. Те же мобы, они вообще никакого отношения к БД например не имеют. Либо те же вещи, они почти везде и всегда будут в ОЗУ, таким образом нету никаких ссылок к БД.
Вынеси загрузку из БД в отдельный механизм.
Например шмотьё, есть вещи, с которыми может взаимодействовать только персонаж который их имеет, например баночка. Держать эту инфу не нужно в ОЗУ, если этот персонаж не в игре. Если он в игре, то грузить всё с ним связанное.
При этом есть такой момент, вещь может принадлежать игроку, но быть на том же аукционе, таким образом с ней могут взаимодействовать. Получается она должна быть в ОЗУ всегда, даже если её владелец не онлайн. А это реализуется простым списком вещей для аукциона, который есть в БД и в ОЗУ. Таким образом если вещь купили, то её нужно изъять у игрока который был владельцем, если он оффлайн, это делается через БД, и тут нужно быть уверенным что он сейчас не заходит в игру, чтобы не возникло конфликтов, изъятия его шмотки и загрузка её же. По сути, каждая шмотка также имеет уникальный ID, и т.к. она была куплена другим, то тут тупо при загрузке, нужно проверять, не загружены ли эти вещи уже в ОЗУ, если да, то не грузить и т.п. Там куча условий и сценариев на которых можно наколоться.
Поэтому нужно организовать работу с БД и данными в ОЗУ, очень корректно и как весьма мощный механизм.

3. Раньше склонялся к MySQL, но сейчас использую везде MSSQL, намного шустрее выходит, и удобнее с ней работать. Плюс удобный манаджер (визуальный), и другие плюшки относительно самого Query языка.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
DStalk (14.05.2011)