[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Структура базы данных онлайн игры
Страницы: 1, 2, 3
123456
Стала задача написать онлайн игру. Начал проектировать базу данных, но возникло несколько вопросов.
1. Будет несколько игровых валют. (камни, кирпичи, доска, пшеница, и т.д. штук так 20). Как лучше хранить данные валюты?
2. как и в каком виде хранить операции по расходам и доходам игроков.

-----------------------
Мои мысли
-----------------------

Вопрос 1.
Создать таблицу, в которой будет подробно описывать каждая валюта.

t_money

id | name | img
-------------------
1 | камни | a.png
2 | кирпичи| b.png
3 | доска| c.png
и т. д.

PS: По мне это самый оптимальный вариант.


Вопрос 2.
Тут у нас будет две таблицы.


Таблица 1.

t_history

id | type | date

В ней храним id операции, тип операции(постройка дома, покупка валюты и т.д.), и время операции

А вторая таблица будет хранить информацию, какие валюты были задействованы в данной операции, в каком количестве, и в какую сторону были переведены средства(отнимались с баланса или прибавлялись на баланс).


Таблица 2.

t_history_money

id_history | id_money | numbers | type

id_history - ид из таблицы t_history
id_money - ид валюты из таблицы t_money
numbers - сколько было затронуто данной валюты
type - добавлялась или отнималась валюта (0 или 1)


Хочу заметить, что у одной операции может быть задействовано несколько валют.

И тут возникает вопрос о росте базы данных.

Берем в расчет, что в сутки будет играть минимум 5000 игроков, каждый игрок совершает минимум 50 операций, каждая операция затрагивает в среднем 4 валюты.

Итого, за сутки, в таблице t_history появится 5000*50 = 250000 записей,
а в таблице t_history_money 2 250000*4 = 1000000 записей.

Т.е. за сутки база данных будет расти в бешеном темпе, что меня очень смущает.


Да и вопрос с выборкой возник.
За месяц соберется 7.500.000 и 30.000.000 записей, делать выборку по этим таблицам, по-моему будет не легко....



Какие есть мысли по оптимальному решению поставленной задачи?
Valick
Цитата (123456 @ 6.05.2015 - 20:48)
Какие есть мысли по оптимальному решению поставленной задачи?

вам нужно нанять программиста

_____________
Стимулятор ~yoomoney - 41001303250491
123456
Valick
ну и к чему данный ответ?
Valick
123456, я серьёзно.
Судя по вопросу для вас создавать онлайн игру, это как первокласнику писать докторскую диссертацию. Можете обижаться и ставить минусы, но это не изменит положения вещей. Я как акын.. "пою что вижу".
Онлайн игра, даже самая простая - это очень сложно. Попробуйте для начала написать крестики-нолики онлайн. Кстати практически всё написанное в "крестоноликах" можно будет использовать в других играх.

_____________
Стимулятор ~yoomoney - 41001303250491
123456
Valick
Я задал конкретные вопросы, если по делу Вам нечего сказать, то просьба вообще не отвечать.

Было задано два вопроса, и предложено две идеи реализации. Я попросил направить меня на верный путь...

Задаю такие вопросы, т.к. с таким объемом данных в таблицах еще не сталкивался. Не знаю как будет грузиться база и т.д.
Valick
Цитата (123456 @ 6.05.2015 - 22:19)
просьба вообще не отвечать
sergeiss
Цитата (123456 @ 6.05.2015 - 21:48)
За месяц соберется 7.500.000 и 30.000.000 записей, делать выборку по этим таблицам, по-моему будет не легко....

Какие есть мысли по оптимальному решению поставленной задачи?

В частности, надо почитать насчет партиций. Без них тут делать нечего. Сначала почитать, потом поэкспериментировать.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
T1grOK
Смотря какая предусматривается бизнес логика, возможно достаточно будет данные за предыдущие периоды переносить в архивную таблицу.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
inpost
Я бы сделал игру без логов. Чтобы всё работало, а уже потом добавить логи не проблема. wink.gif
Как хранить огромное количество логов - посмотри пример операционной системы и стандартных действий. Там каждый день/неделю/месяц логи уходят в файл-архив, а работа идёт только с основным файлом.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Игорь_Vasinsky
Цитата
В частности, надо почитать насчет партиций.

да ну)) если игра будет написана этим ТС - то о каких миллионах записей вы говорите)))

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
JohnBraxton
Цитата (123456 @ 6.05.2015 - 17:48)
За месяц соберется 7.500.000 и 30.000.000 записей, делать выборку по этим таблицам, по-моему будет не легко....

Не соглашусь. На чем "крутиться" БД? Если MySQL, тогда какой движек и алгоритм выборки Вы используете (ну или планируете)?
sergeiss
Цитата (Игорь_Vasinsky @ 7.05.2015 - 08:03)
если игра будет написана этим ТС - то о каких миллионах записей вы говорите)))

Дай человеку помечтать, не будь вредным smile.gif А если мечтает, то пусть хоть в мечтах правильно всё делает. Поэтому - его мечты должны быть о партициях.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
123456
Цитата
В частности, надо почитать насчет партиций. Без них тут делать нечего

Ну это само собой.


Цитата
возможно достаточно будет данные за предыдущие периоды переносить в архивную таблицу.


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


Цитата
какой движек и алгоритм выборки Вы используете (ну или планируете)?

База MySql, соединение с базой установлено через mysqli
Выборку планируем выполнять обычным запросом и после преобразовывать в необходимый вид посредством php.

Вот пример:


$sql = $mysqli->q("
SELECT *
FROM t_1, t_2, t_money
WHERE t_1.id = t_2.t_1_id AND
t_money.id = t_2.id_money
ORDER BY t_2.t_1_id ASC"
);

$id_act = null;

while ($sql_result = $sql->fetch_assoc())
{
if ($id_act != $sql_result['t_1_id'])
{
$id_act = $sql_result['t_1_id'];

echo "<br>Id операции ". $sql_result['t_1_id'] ." Время ". $sql_result['date'] ." Валюты: <br>";
}

echo $sql_result['name'] . " " . $sql_result['numbers'] ."<br>";
}



Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.