Является ли Membase хорошим уровнем настойчивости для сервера Erlang Gamer?

StackOverflow https://stackoverflow.com/questions/7826773

Вопрос

Я стремлюсь создать игру в браузер, в которой игроки могут создавать здания.

В каждом здании будет несколько модулей (двигатели, офисы, производственные линии, ...). Каждый модуль будет иметь одно или несколько действий, выполняемых, например, создание 2OO 'Item X' с ингредиентами Y, Z.

Сервер игры будет настроен с Erlang: OTP -приложение в качестве самого сервера и азот в качестве веб -фронта. Мне нужна настойчивость данных. Я думал о следующем:

Когда кто -то или что -то взаимодействует со зданием или таймером, представляющим какую -то производственную линию, руководитель не порождает Gen_Server (если еще не появляется), который загружает состояние здания из базы данных, чтобы Gen_Server мог отвечать на сообщения, такие как 'добавить Этот модуль ', «начинает это действие», «хранить это производство на склад», «Die» и т. Д. (

Но когда здание не получает никаких сообщений в течение X секунд или минут, он прекратит (благодаря функции тайм -аута Gen_Server) и отбросит свое текущее состояние обратно в базу данных.

Таким образом, так как это будет (мягкая) игра в реальном времени, Gen_Server должен быть настроен очень быстро. Я думал о Мембазе как о базе данных, потому что, как известно, у нее очень хорошее время отклика.

Мой вопрос: Когда сервер Gen встает на работу, его состояния заполняют некоторую память, и это состояние присутствует в памяти, обрабатывающей Membase, поэтому состояние в два раза использует его размер в памяти. Это плохой дизайн?

Является ли Membase хорошим решением для устойчивости в моем случае? Будет ли использовать Mnesia лучшим выбором или что -то еще?

Я боюсь Mnesia 2 Go (или 4?) Предел размера таблицы, потому что в настоящее время я не знаю, как средний размер состояния моего Gen_Servers (здания в этом примере, игроки Butalso, производственные линии, что угодно), и я мог бы когда -нибудь больше, чем 1 игрок :)

Спасибо

Это было полезно?

Решение

Я согласен с Hynek -Pich -vychodil. Riak-отличная вещь для хранения Key-Valey.

Мы используем Riak почти на 95% для того же, что вы описали. Все работает до сих пор без каких -либо проблем. В случае, если вы достигнете ограничения производительности Riak - добавьте больше узлов, и это хорошо!

Еще одна классная вещь о Riak - это очень низкое снижение производительности за время. Вы можете найти больше информации о сравнительном анализе Riak здесь: http://joyeuur.com/2010/10/31/riak-smartmachine-benchmark-the-technical-details/

Если вы пойдете с этим:

Об использовании мембазы и памяти: я также попробовал Membase, но я обнаружил, что она не подходит для моих задач - (Membase объявляет о достойке разлома, но я не мог установить ее так, как это должно работать с недостатками, даже с помощью парней из мембазы Я не преуспел). Таким образом, на данный момент я использую следующую архитектуру: все игроки, которые находятся в Интернете и играют в игру, представлены в качестве игроков (Gen_Server). Все данные данных и бизнес-логика для каждого игрока находятся в процессе игрока. Время от времени каждый игрок-процесс желает спасти свое состояние в Риаке.

Пока кажется, очень быстрый и эффективный подход.

Обновление: теперь мы с PostgreSQL. Это превосходно!

Другие советы

Вы можете посмотреть биткска или другой Риак Бэкдинги для хранения ваших данных. Избегайте IPC, безусловно, хорошая идея, так что держите его внутри Erlang.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top