PlayerIO Урок 4 - База данных BigDB

Привет! В этом уроке я дам информацию по базе данных(бд), я практику мы испробуем на реальном проекте, который скоро начнем делать вместе с вами:) Информация переведена с документации по PlayerIO. И так…

BigDB

Для того, чтобы сделать возможным легко масштабировать игры, Player.IO предоставляет BigDB; база данных, построенная специально для игр, позволяющая принимать различные нагрузки.

BigDB не является реляционной базой данных, похожа на MongoDB и CouchDB. Все действия над масштабированием выполняет BigDB, поэтому разработчику ничего не нужно предпринимать для этого.

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

Таблицы
Все данные в BigDB хранятся в таблицах. Так как BigDB не требует четкой структуры для объектов, вы можете хранить все в одной таблице. Но правильной практикой является использование различных таблиц под различные типы объектов, чтобы в дальнейшем можно было добавить различные индексы для поиска.

BigDB управляется через панель администратора, где разработчик может:
-создать/удалить таблицу
-добавить/изменить/удалить индексы в таблицах
-получить список данных в таблицах
-экспортировать объекты из таблиц
-очищать таблицы

Права доступа
Каждая таблица BigDB может иметь разные права доступа для каждого типа подключения Player.IO, так что вы можете тонко настроить, какие данные могут быть прочитаны и/или записаны кем-то.

Очень важно продумать, чтобы предотвратить читерство или даже хуже — хаос, при записи неверных данных или даже удалении всего.

Например, вы можете настроить права так, чтобы ваш клиентский код имел доступ только для чтения и записи из одной, не значимой таблицы, в то время как ваш другой код(серверный) имел полный доступ ко всем таблицам.

Права доступа, которые могут быть установлены для каждой таблицы:
-CanLoadByKeys — Можно загрузить объекты базы данных по ключам
-CanLoadByIndexes — Можно загрузить объекты с помощью индексов. Это включает в себя загрузку одного объекта и загрузки ряда объектов.
-CanCreate — Можно создавать новые объекты базы данных
-CanSave — Можно сохранить изменения, внесенные в объект базы данных
-CanDelete — Можно удалять объекты базы данных

Примечание: Serverside код, работающий на кластере Player.IO всегда будет иметь полный доступ ко всем таблицам, так как он работает в полностью доверенной среде.

Database objects
BigDB сохраняет объекты базы данных в таблицы, которые создаются и настраиваются разработчиком в админ-панели Player.IO. Объекты извлекаются из таблиц по их уникальному ключу или индексам, созданных разработчиком.

Каждый объект базы данных принадлежит к одной таблице, и идентифицируется строковым ключом(string key), который является уникальным для этой таблицы. То есть, нет двух объектов в той же таблице с одинаковым ключом.

Объект базы данных состоит из одного или более именованных значений, где каждое значение одного из следующих типов: Boolean, Int, UInt, Long, Float, Double, String, DateTime, ByteArray или массив, содержащий значения разрешенных видов, или вложенный объект, содержащий именованные значения.

Ограничения
Существует два ограничения:
-ключ объекта должен состоять из 1-50 символов(букв, цифр).
-максимальный размер объекта 500KB.

Ограничение на количество объектов зависит от тарифного плана. Бесплатно можно содержать до 25 000 объектов.

Пример
Серверная сторона:

//Создание объекта с автоинкрементовым ключом
var score = new DatabaseObject();
score.Set("username", "Peter");
score.Set("Score", 100);
PlayerIO.BigDB.CreateObject("highscores", null, score, null); 




// Загрузка объекта где ключ = 'Peter' из таблицы 'users'
PlayerIO.BigDB.Load("users", "Peter", delegate(DatabaseObject user) {
	var score = user.GetInt("Score", 0); //Получить очки
	user.Set("Score", score + 1); //Добавить к очкам +1
	user.Save(); //Сохранить изменения в бд.
});


Индексы
Если вы хотите найти объект по какому-либо свойству, или несколько объектов отсортированных по значению поля, то вам необходимо создать индексы.

Индекс — это список названий свойств, и для каждого свойства указывается тип и порядок сортировки. Для начинающих индексы не нужны, поэтому я даю вам ссылку на статью, где подробно описано как делать и зачем это.

PlayerObjects
Основной задачей BigDB является сохранение данных каждого пользователя, и обеспечение безопасности для чтения/записи.

Все игры имеют таблицу, названную «PlayerObjects», и в АПИ есть методы для доступа к ней.

На стороне клиента это метод LoadMyPlayerObject:

//получение данных
LoadMyPlayerObject((obj)=>{
	obj.Level = 5; //Изменяем объект
	obj.save(); //Сохраняем
});


В серверном коде это метод GetPlayerObject, который загружает PlayerObject(объект базы данных), присущий Player(класс игрока).
Существует свойство PreloadPlayerObjects. Если значение равно True, то при входе в игру игроку подгружается его объект из базы данных, в случае False этого не происходит. Значение PlayerObject никогда не равно null, т.к. даже если у игрока нет объекта в бд, то создастся пустой.

Все это требует малого количества кода для работы с таблицей, и вот пример:


public class MyRoom : Game<MyPlayer> {
	public override void GameStarted() {
		PreloadPlayerObjects = true;//разрешаем подгрузку данных из бд при входе
	}

	public override void UserJoined(MyPlayer player) {
                //Отсутствует ли объект в базе данных?
		if (player.PlayerObject.Get("Level", 0) == 0) {
			player.PlayerObject.Set("Level", 5);//выставляем значение
			player.PlayerObject.save();//сохраняем
		}
	}
}


Асинхронные операции
Все методы, которые требуют время на выполнение, содержат коллбэки(функции-возврата) для успешного выполнения или для случая возникновения ошибки.

Остальное можно почитать на офф сайте.

Для создания таблицы нужно перейти в игру, выбрать слева раздел «BigDB», затем нажать кнопку «Create Table». Вводим имя, описание и жмем «Create Table». Пока нам не нужны дополнительные таблицы, поэтому создавать нам ничего не нужно.

На этой пока все. В следующих уроках мы начнем писать сетевую игру:)

Всем добра и мира, до скорого:)

0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.