Структура базы данных стратегии в реальном времени на PHP?

Я пытаюсь создать стратегическую браузерную игру в реальном времени на PHP, однако я стараюсь сделать игру максимально реальной, а это значит, что для каждого пользователя будет выделено отдельное количество данных, а одна база данных не будет работать хорошо. с моими идеями, так как я хочу хранить все о пользователе и его "империи", что может сделать игру более реалистичной


Вот идея о том, сколько данных нужно хранить:

  • Население: например, когда у каждого гражданина будет свой собственный ряд, чтобы отслеживать его тип, навыки, статистику, назначения и т. Д., И так как "империя" может иметь несколько тысяч граждан раз (*), несколько тысяч пользователей могут привести к перегрузка для одного стола

  • Армия: например, где у каждого солдата будет свой собственный ряд, чтобы отслеживать его тип, навыки, характеристики, назначения и т. Д., И так как армия может получить немного большие значения (*), несколько тысяч пользователей могут снова привести к небольшой перегрузке для одного стола

  • Здания: .... та же история здесь

  • Богатство: .... где отслеживается каждая унция или товар, который может держать настоящая империя

  • и т.д., и вы получите идею....


Поэтому моя первая идея - дать каждому пользователю уникальный идентификатор, например. 5b325475ef698183bbbcc5352c7f20f5... и есть папка пользователя, в которой хранятся базы данных SQLite для отдельных пользователей в структуре, подобной этой:

/user_data
|--/5b325475ef698183bbbcc5352c7f20f5
|----/account.db
|----/buildings.db
|----/army.db
|----/population.db
|----/empire.db

И база данных MySQL для хранения общих общедоступных данных для внешнего интерфейса, которые будут результатом накопленных данных из баз данных sqlite.

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


И моя вторая идея состоит в том, чтобы иметь разные базы данных MySQL для каждого пользователя снова, используя уникальный идентификатор пользователя, однако я думаю, что в конечном итоге у меня будет слишком много подключений к базе данных и действительно испорченный код для обслуживания, и снова уменьшенный размер этого что часто бывает трудно вносить изменения, так как вам приходится изменять каждую базу данных для каждого пользователя (опять же, все же лучше, чем использовать одну базу данных, которая может стать медленной и перегруженной со временем)


Если кто-то сталкивался с такой проблемой и нашел решение, поделитесь им, или какая из представленных выше идей может быть наиболее подходящей, учитывая, что это браузерная игра, и игроки будут тратить большую часть своего времени на переключение страниц, что приводит к большому количеству взаимодействий с базами данных (поэтому одна база данных MySQL может быть не лучшим решением)

Спасибо за ваше время и терпение:D

РЕДАКТИРОВАТЬ: приложение будет построено с использованием Yii Framework, но если потребуется, я создам новую "среду" с нуля

1 ответ

Одна база данных на пользователя - абсолютная ерунда, если вы хотите увеличить число пользователей. Представьте, что в вашу игру играют 10000 человек, вам понадобятся десятки серверов баз данных, чтобы справиться со всеми ними, и ваши расходы наверняка возрастут.

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

Другие вопросы по тегам