Сложный вопрос/выбор (не очень касается движка)

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Сложный вопрос/выбор (не очень касается движка)

Сообщение Entwickler 21 ноя 2015, 21:38

В общем, есть проект, игра, жанр стратегия, варгейм, только в онлайн режиме и только по мобильные платформы. Детально расписывать не буду, только то, что касается данной проблемы. В игре есть планеты, ландшафт которых состоит из гексогональной сетки, по которым передвигаются юниты и на которых выстраиваются строения. Планеты генерируются по мере регистрации новых игроков. Время, необходимое на то, чтобы юнит прошел клетку зависит от типа клетки, юнита и его состояния, но в среднем думаю это около 15 минут будет. И собственно, проблема в том, что если же размер сетки ОДНОЙ планеты около 1000х1000 то в оперативной памяти (сервера на C#) это занимает около 70 мб, хотя общий размер необходимый в памяти на одну клетку около 30 байт (сумма размеров типов переменных), а остальное это скорее всего ссылки и т.п. А теперь представим, что планет достаточно много, допустим 10 000, то и оперативы только на это нужно 500-700гб, а это просто очень плохо и много. Второй вариант - хранить сетку с данными в базе данных, но это здесь тоже возникают проблемы: пользователю (игроку) вся карта сразу не нужна, а только часть (так как трафик экономить тоже нужно), то есть, сервер будет кидать тяжелый запросик в СУБД (мс скл сервер), примерно такого вида (представим, что в базе 10 000 планет, а значит в таблице около 10 000 000 000 записей): SELECT [Данные] From Regions Where PlanetID=[] And X>[] And X<[] And Y>[] And Y<[].
Третий вариант это некая смесь хранения бд и в оперативной памяти (сетка в оперативной памяти, остальное в базе: строения, некоторые данные, которые необходимо будет в разные таблицы пихать), но в этом варианте возникает много трудностей при обработке данных на стороне сервера.

Так что короче такая вот проблема, что лучше выбрать и что пожертвовать не знаю, может у кого были подобные проблемы или подобный выбор?
Entwickler
UNец
 
Сообщения: 12
Зарегистрирован: 26 апр 2014, 06:30
Skype: serega14021997

Re: Сложный вопрос/выбор (не очень касается движка)

Сообщение Diab10 22 ноя 2015, 17:35

Хранить планеты в файлах. По мере необходимости подгружать/удалять
Аватара пользователя
Diab10
Адепт
 
Сообщения: 3401
Зарегистрирован: 17 мар 2011, 20:42
Откуда: 123 RUS
Skype: diab1023

Re: Сложный вопрос/выбор (не очень касается движка)

Сообщение Syberex 22 ноя 2015, 20:25

В игре есть планеты, ландшафт которых состоит из гексогональной сетки, по которым передвигаются юниты и на которых выстраиваются строения. Планеты генерируются по мере регистрации новых игроков.

Ой как мне это знакомо, в 2008 г. пытался сделать такую же хрень на java3d :D
"Игра мечты" называется, потом узнал ...

Берите SQL и не парьтесь :)
Хотя не ясно, что будет в отдельной клетке и как это будет выглядеть, поэтому сложно советовать.
Нужно подумать над тем, будут ли у вас в клетке происходить какие-то изменения в процессе игры, строительство и разрушение зданий,
энергия зданий, хранение ресурсов (склады), выработка ресурсных мест, наличие юнитов и тд. Чем этого больше, тем ближе вам SQL, так как нужен обмен и актуальные данные тысяче игроков.
Если только статичная информация, то можно без SQL.
Возможно совместить, файловый вариант с SQL.
Аватара пользователя
Syberex
Адепт
 
Сообщения: 2292
Зарегистрирован: 14 янв 2011, 20:35
Откуда: Кострома
  • Сайт

Re: Сложный вопрос/выбор (не очень касается движка)

Сообщение Entwickler 23 ноя 2015, 10:36

Diab10 писал(а):Хранить планеты в файлах. По мере необходимости подгружать/удалять


спасибо за ответ.

Обдумывал данный вариант, но полностью в файле не вариант, ибо размер при подгрузке в оперативную память будет огромный, необходимо будет комбинировать, а как, над этим ещё думаю.
Entwickler
UNец
 
Сообщения: 12
Зарегистрирован: 26 апр 2014, 06:30
Skype: serega14021997

Re: Сложный вопрос/выбор (не очень касается движка)

Сообщение Woolf 23 ноя 2015, 10:56

Во первых, 30 байт на клетку? Чего так много-то? Во вторых - вся ваша карта 1000х1000 занимает в памяти 29 кб, зачем вам их хранить в памяти ВСЕ карты, если нужно хранить только те, где что-то происходит? При онлайне в 1000 игроков, как я понимаю, это будет всего 1000 карт, т.е. 25 мб памяти. В третьих, искренне не понимаю, а зачем вам хранить все эти клетки на карте? что в этих клетках за информация? Если вода-земля-леса, то можно сделать генератор ландшафта и хранить только сид.
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Сложный вопрос/выбор (не очень касается движка)

Сообщение Entwickler 23 ноя 2015, 10:58

Syberex писал(а):
В игре есть планеты, ландшафт которых состоит из гексогональной сетки, по которым передвигаются юниты и на которых выстраиваются строения. Планеты генерируются по мере регистрации новых игроков.

Ой как мне это знакомо, в 2008 г. пытался сделать такую же хрень на java3d :D
"Игра мечты" называется, потом узнал ...

Берите SQL и не парьтесь :)
Хотя не ясно, что будет в отдельной клетке и как это будет выглядеть, поэтому сложно советовать.
Нужно подумать над тем, будут ли у вас в клетке происходить какие-то изменения в процессе игры, строительство и разрушение зданий,
энергия зданий, хранение ресурсов (склады), выработка ресурсных мест, наличие юнитов и тд. Чем этого больше, тем ближе вам SQL, так как нужен обмен и актуальные данные тысяче игроков.
Если только статичная информация, то можно без SQL.
Возможно совместить, файловый вариант с SQL.


Спасибо за ответ.
Не то чтобы игра мечты. Просто я смотрел по популярности в плей маркете, нашел что-то подобное, но без 60-70% того, что я задумал, в итоге я просмотрел некоторые онлайн игры такого рода, что-то взял там что-то там, в итоге составил для себя окончательную картину того, как это должно выглядеть (кстати, именно по игровой механике много моментов похожи на Civilization, хотя я сам в неё не играл никогда (развитие технологий и науки (в моём случае, это не очень линейно, игроку даёться возможность на псевдо- "бесконечное развитие", что в игре будет казаться бесконечным), гексогональная сетка и строения на карте), ну а существенным отличием это то, что игрок всё время взаимодействует с тысячами таких же игроков (на одной планете размером 1000х1000 может быть до 100 игроков, то есть получается по 100 (как минимум) квадратов (регионов) каждому игроку в каждую из четырёх сторон), которые находятся на разных планетах и в разных солнечных системах.

А теперь о клетках, я их называю регионами.
В регионе статичная информация это только тип региона (тип местности), эта информация будет грузиться в бекенд сервер для того, чтобы её можно было получить почти моментально во фронтент, так как в памяти она будет представлена в трёхмерном виде (планета, х координата, у координата), ну а значениями будут выступать типы местности.
Также для некоторых регионов будут определены ресурсы (количество которых уменьшается по мере использования строениями или же другими юнитами).
Также, в регионе может быть некоторая динамическая информация, для одного региона это может занять максимум 12 байт, но только в некоторых регионах она будет присутствовать (эти данные появляются из-за некоторой активности игроков).
Также, для каждого региона может быть определенно строение: населённый пункт (город может быть разделён на несколько соседних клеток (только в том случае, если население очень высокое), для одной клетки города доступно 9-12 (не решил ещё сколько это будет точно) строений) или же обычное строение.
Также на каждом регионе может размещаться несколько десятков юнитов.
Вот собственно в этом и все трудности распределения данных, так как их ещё нужно и обрабатывать.
Entwickler
UNец
 
Сообщения: 12
Зарегистрирован: 26 апр 2014, 06:30
Skype: serega14021997

Re: Сложный вопрос/выбор (не очень касается движка)

Сообщение Diab10 23 ноя 2015, 11:00

Entwickler писал(а):
Diab10 писал(а):Хранить планеты в файлах. По мере необходимости подгружать/удалять


спасибо за ответ.

Обдумывал данный вариант, но полностью в файле не вариант, ибо размер при подгрузке в оперативную память будет огромный, необходимо будет комбинировать, а как, над этим ещё думаю.


Ну можно читать карту из файла порционно. Вам же не нужна постоянно вся карта? Поделите карту на сектора и подгружайте из файла только нужный кусок, а ненужные удаляйте

Woolf писал(а):Во первых, 30 байт на клетку? Чего так много-то? Во вторых - вся ваша карта 1000х1000 занимает в памяти 29 кб, зачем вам их хранить в памяти ВСЕ карты, если нужно хранить только те, где что-то происходит? При онлайне в 1000 игроков, как я понимаю, это будет всего 1000 карт, т.е. 25 мб памяти. В третьих, искренне не понимаю, а зачем вам хранить все эти клетки на карте? что в этих клетках за информация? Если вода-земля-леса, то можно сделать генератор ландшафта и хранить только сид.


29 мб же, а не кб на 1 карту.
Аватара пользователя
Diab10
Адепт
 
Сообщения: 3401
Зарегистрирован: 17 мар 2011, 20:42
Откуда: 123 RUS
Skype: diab1023

Re: Сложный вопрос/выбор (не очень касается движка)

Сообщение Entwickler 23 ноя 2015, 11:03

Woolf писал(а):Во первых, 30 байт на клетку? Чего так много-то? Во вторых - вся ваша карта 1000х1000 занимает в памяти 29 кб, зачем вам их хранить в памяти ВСЕ карты, если нужно хранить только те, где что-то происходит? При онлайне в 1000 игроков, как я понимаю, это будет всего 1000 карт, т.е. 25 мб памяти. В третьих, искренне не понимаю, а зачем вам хранить все эти клетки на карте? что в этих клетках за информация? Если вода-земля-леса, то можно сделать генератор ландшафта и хранить только сид.


30 байт это максимум, в среднем это будет около 12-15. карта 1000х1000 занимает 28 МБ (также это максимум). Немного про проект я расписал выше.
Суть игры в том, что игрок не долже быть постоянно в онлайне, он отправил юнитов на определённую позицию, ещё что-нибудь сделал и выше, а в это время серверу то нужно "выполнять" то что он сделал, таким образом неважно сколько игроков в онлайне, ведь обрабатывать данные нужно будет постоянно. На одной карте может быть несколько десятков игроков.
Entwickler
UNец
 
Сообщения: 12
Зарегистрирован: 26 апр 2014, 06:30
Skype: serega14021997

Re: Сложный вопрос/выбор (не очень касается движка)

Сообщение Entwickler 23 ноя 2015, 11:05

Diab10 писал(а):
Entwickler писал(а):
Diab10 писал(а):Ну можно читать карту из файла порционно. Вам же не нужна постоянно вся карта? Поделите карту на сектора и подгружайте из файла только нужный кусок, а ненужные удаляйте


Тоже думал об этом, но только подгружать скорее всего из БД
Entwickler
UNец
 
Сообщения: 12
Зарегистрирован: 26 апр 2014, 06:30
Skype: serega14021997

Re: Сложный вопрос/выбор (не очень касается движка)

Сообщение Woolf 23 ноя 2015, 11:09

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

Так храните юнитов, а не карты ))
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Сложный вопрос/выбор (не очень касается движка)

Сообщение Entwickler 23 ноя 2015, 11:17

Woolf писал(а):
таким образом неважно сколько игроков в онлайне, ведь обрабатывать данные нужно будет постоянно

Так храните юнитов, а не карты ))


Так тут тоже проблема...... Допустим юнит находиться в определённом регионе высокий уровень радиации (да - да, и радиация тоже может быть в регионе @-) , допустим после ядерного удара/бомбы/ взрыва ядерной электро-станции), то юниту необходимо будет снимать постепенно его здоровье. а кидать постоянно запрос в бд чтобы узнать есть ли там радиция или ещё что-то (а может быть и ещё что-то 8-x ) это не гуд.

Ну в общем я так подумал: те данные которые пользователю не очень нужны хранить в памяти (например здоровье юнита, его действия, радиация для регионов и ещё что-то 8-x и т.д.), остальное в бд, но некоторе ещё в бд и в памяти, например местность (что бы быстрее получить данные и отправить их пользователю, так как прямой доступ всё же быстрее выборки из базы). вот так.
Entwickler
UNец
 
Сообщения: 12
Зарегистрирован: 26 апр 2014, 06:30
Skype: serega14021997

Re: Сложный вопрос/выбор (не очень касается движка)

Сообщение Woolf 23 ноя 2015, 11:26

Ну и еще вариант - распараллеливание, за некоторое число карт отвечает один сервер, за другое число - другой сервер и так далее. Но я бы все же посоветовал архитектуру как-то получше продумать. К примеру, если вы помните такую игру Ogame, меня тоже интересовало, а как оно рассчитывает полеты, бои.. Оказывается, что бой рассчитывается не в реальном времени, а когда один из участников боя зайдет в игру.
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Сложный вопрос/выбор (не очень касается движка)

Сообщение Entwickler 23 ноя 2015, 11:32

Woolf писал(а):Ну и еще вариант - распараллеливание, за некоторое число карт отвечает один сервер, за другое число - другой сервер и так далее. Но я бы все же посоветовал архитектуру как-то получше продумать. К примеру, если вы помните такую игру Ogame, меня тоже интересовало, а как оно рассчитывает полеты, бои.. Оказывается, что бой рассчитывается не в реальном времени, а когда один из участников боя зайдет в игру.


Спасибо за ответы. Над архитектурой я ещё конечно подумаю. За Ogame спасибо, посмотрю что и как у них происходит, может быть для себя что-нибудь возьму как пример.
Entwickler
UNец
 
Сообщения: 12
Зарегистрирован: 26 апр 2014, 06:30
Skype: serega14021997

Re: Сложный вопрос/выбор (не очень касается движка)

Сообщение Entwickler 23 ноя 2015, 11:38

Woolf писал(а):Ну и еще вариант - распараллеливание, за некоторое число карт отвечает один сервер, за другое число - другой сервер и так далее. Но я бы все же посоветовал архитектуру как-то получше продумать. К примеру, если вы помните такую игру Ogame, меня тоже интересовало, а как оно рассчитывает полеты, бои.. Оказывается, что бой рассчитывается не в реальном времени, а когда один из участников боя зайдет в игру.


А на счёт того, что распаралелить, я думал вот так: один сервер полностью за юнитов, их движения, здоровье и тп.п, второй - за карту/местность, строения и т.п.
Entwickler
UNец
 
Сообщения: 12
Зарегистрирован: 26 апр 2014, 06:30
Skype: serega14021997

Re: Сложный вопрос/выбор (не очень касается движка)

Сообщение Paul Siberdt 23 ноя 2015, 12:39

А ничо, что сфера из гексагонов не строится? С восемью пятиугольниками надо будет чтой-то делать.
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

След.

Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 17