В общем, есть проект, игра, жанр стратегия, варгейм, только в онлайн режиме и только по мобильные платформы. Детально расписывать не буду, только то, что касается данной проблемы. В игре есть планеты, ландшафт которых состоит из гексогональной сетки, по которым передвигаются юниты и на которых выстраиваются строения. Планеты генерируются по мере регистрации новых игроков. Время, необходимое на то, чтобы юнит прошел клетку зависит от типа клетки, юнита и его состояния, но в среднем думаю это около 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<[].
Третий вариант это некая смесь хранения бд и в оперативной памяти (сетка в оперативной памяти, остальное в базе: строения, некоторые данные, которые необходимо будет в разные таблицы пихать), но в этом варианте возникает много трудностей при обработке данных на стороне сервера.
Так что короче такая вот проблема, что лучше выбрать и что пожертвовать не знаю, может у кого были подобные проблемы или подобный выбор?