
Работа с Player IO API part #3 - База данных (теория)

Поэтому давайте возьмёмся за эту тему с достаточно серьёзными намерениями — создадим оптимальную БД для нашей игры.
Player IO в качестве базы данных использует собственный её тип, не относящий к SQL — BigDB. База данных, разбиение и скалирование которой происходит без участия разработчика. От нас же потребуется настройка и оптимизация её работы под свои нужды. Начнём с создания таблиц, настройки прав, а также работы с индексами и ключами.
Сегодня, наверное, вы сможете себя почувствовать вот таким человеком:

^_^
Создание таблицы
Заходим на сайт Player IO. Далее в нашу с вами админ панель. Там находим название нашей игры, кликаем на название. При этом должен открыться список компонентов PIO API.

Кликаем по второму компоненту — BigDB.
Далее вы должны будете увидеть примерно следующее:

Дело в том, что по умолчанию, для каждой игры создаётся пустая таблица — PlayerObject. Она будет особенно полезна для маленьких игровых проектов. Работа с ней сводится к двум — трём методам заранее заготовленными в API, и это действительно очень просто и быстро. Когда перейдём к практике — попробуем для начала поработать именно с этой таблицей.
Но пока о теории — создаём нашу собственную таблицу следующим образом:

В появившемся окне нам предлогают выбрать имя для нашей таблицы (без пробелов и спец символов), а также краткое описание к ней. Как советуют сами разработчики, очень полезно в качестве описания записывать логику хранимых значений. Для примера:
В моей новой таблице «Registration» будут храниться объекты базы данных, именем которых будет имя пользователя username. Этот объект должен содержать две строковые переменные Username и Password. В следствие этого, полезным было бы следующие описание таблицы:
username = {
Username: user name
Password: user password
}
Вот, что мы увидим после создания таблицы:

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

Ключём будет слово monsters.
Индексы
Что есть индексы? Представьте что у нас есть множество объектов с ключами по имени пользователя. В них хранятся данные о имени игрока, Времени его последнего посещения, а также о его пойнтах в игре.
В таком случае, чтобы составить лист рекордов, нам прийдётся пройтись по всем пользователям в цикле, используя ас3 либо серверный код и рассортировать данные вручную.
Индексы призваны облегчить эту задачу. С помощью индексов, выборку данных можно производить не с использованием имени каждого игрока, а по имени индекса — например ByScore.
Кроме того, индексирование позволяет сортировать объекты не только при получении данных непосредственно клиентом, но также объекты сортируются и в нашей таблице в реальном времени.
Например, в моей игре 3 монстра. У каждого своё имя, и каждый имеет свой уровень развития. Для удобства, я хочу рассортировать их по уровням — от высшего к низшему. Вот что я делаю:
Создаю новый индекс, называю его ByLevels (Дословно — «по уровням», то есть — сортировка по уровням).

Добавляю одно свойство (второе «Name» не обязательно, однако, при использовании нескольких свойств появляется возможность создавать сложные виды сортировки), выставляю тип как «Целочисленное», и имя свойства «Level». Колонка «Order by» указывает на тип сортировки: Descending — от большего к меньшему, а Ascending, соответственно, наоборот, от меньшего к большему. Добавляю 3 объекта с различными переменными Levels в свою таблицу:

(Обратите внимание, что объекты по уровням были созданы хаотично — никакой закономерности).
Далее заходим на заранее созданную вкладку ByLevels (чуть выше первого объекта) и видим что объекты здесь у нас отсортированы от большего к меньшему:

Теперь разберёмся с правами доступа для нашей новой таблицы.
Права доступа
Права доступа являются уникальными для каждого типа соединения и должны настраиваться отдельно. Однако, наш тарифный план FREE исключает возможность использования более чем одного типа соединения, поэтому настраивать права доступа будем всегда только для типа соединения public (по умолчанию).
Load by keys: Загрузка с использованием Ключей.
Load by Indexes: Загрузка с использованием Индексов.
Full Creator Rights: Объекты данной таблицы могут быть загружены, модифицированы и удалены способом обращения к ним по ключам, непосредственным создателем этих объектов.
Create: Разрешает создавать и сохранять новые объекты.
Delete: Разрешает удалять объекты способом обращения как по ключам, так и по индексам.
Save: Разрешает модифицировать и сохранять все объекты.
Стоит напоследок отметить, что после настройки прав доступа таблицы, желательно проверить те же настройки в Settings/Connection edit.
- +4
- darkvam
Комментарии (7)
То есть сложные выборки не сделать, да?
Кстати, ты сам где планируешь все это использовать? HoH online?
Если речь о другом — то пожалуйста, уточни. Быть может я сам чтото напутал.
А вот вопрос с использованием. Я не знаю. Всегда было и есть желание создать онлайн игру. В ближайших планах — HOH онлайн:) Но скорей всего прийдётся отработать навыки на чём-нибудь полегче.) Рожаю идею)
Теперь понятно.
HoH online было бы круто.
А вот идеи просто в стиле дез матча на парочку, вынашиваются уже давно. Скорей всего появится сначало что-то подобное, для пробы пера. А вообще, конечно, мечтаю и о мире, и о PvE с развитым PVP:)
Поэтому сейчас нещадно штудирую Player IO и разбираюсь с ним вместе с вами) В нём очень много тонкостей, которые тоже надо побороть, например ассинхонизация передоваемых данных, латентность сети и т.п. Но это глобальные проблемы, с ними сталкиваются все разработчики онлайн игр/приложений.
А вот прикрутить PvE будет намного проще, к тому же он у тебя уже есть.
Я дез матч представлял себе немного иначе. Будет чат-комната, где будут сидеть игроки. Под их например, аватарками, висят — звание, опыт, ну и карма допустим. И мы вот заходим в такую комнатку и выбираем себе противника. Далее переходим в окошко снаряжения отряда (как будет во второй части — там дез матч, но только для сингл плеера), нам дают например, 5к денег и мы снаряжаем себе отрядик. Противник делает тоже самое. Потом начинается захлёст. Скорей всего конечно, в пошаговом режиме. Так меньше багов.
А то что описал ты — это уже практически основа ПвП в ПвЕ мире:) покрайней мере я себя точно так это представлял) именно с кастомизацией юнитов, а именно — добавить в отряд ГЕРОЯ. Конечно закос под дисайплс… но как иначе) Не они первые.