Какая СУБД достаточно быстра для онлайн-игры (несколько тысяч игроков)? [закрыто]


8

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

Какая СУБД достаточно быстрая? Насколько он похож на SQL Server (как я изучил SQL Server в школе)?


World Of Warcraft основана на Oracle.
Philᵀᴹ

Какую бы СУБД вы не выбрали, не забывайте принимать во внимание лицензирование. Может быть, ваша бесплатная версия подходит для небольших нагрузок, но если и когда вам придется увеличивать или уменьшать масштаб, вы можете столкнуться с серьезным ударом по наклейке.
Датагод

Ответы:


24

Это действительно сложный вопрос. Вы можете взять самую быструю платформу баз данных в мире, разработать ужасную схему, написать дурацкое приложение вокруг нее, а затем испытать искушение обвинить платформу баз данных. В то же время вы можете воспользоваться бесплатным SQL Server Express и, с правильным дизайном, логикой приложения и подходом к разумной масштабируемости (например, масштабирование операций чтения с помощью кэширования данных и т. Д.), Вы можете написать приложение, которое обрабатывает тысячи У пользователей нет проблем.

Верю ли я, что SQL Server может обслуживать тысячи пользователей? Абсолютно. Верю ли я, что Oracle и DB2 могут это сделать? Безусловно. MySQL? Не уверен, не хватает опыта там. Доступ? Вероятно, не мудрый выбор вообще. Если вы знакомы с SQL Server, то я полагаю, что вы выбираете именно этот путь, просто имейте в виду, что ваш выбор СУБД сам по себе не будет определять успех или неудачу.


Ну, мне просто нужно руководство. Дело не в том, что небольшая инди-игра сразу достигнет тысячи одновременных пользователей. Спасибо!
Саймон Вербеке

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

Правильно, и вот своевременная статья, объясняющая, как Facebook теперь чувствует ожог для своих первоначальных дизайнерских решений, основанных на аргументах «мы никогда не получим огромных»: gigaom.com/cloud/… ... только что заметил, что на эту статью также ссылаются в ответе Роландо
Аарон Бертран

@ Аарон: Хорошие вещи. +1 за ваш ответ, потому что программные инфраструктуры вокруг MMORPG должны быть независимыми от базы данных и при этом вести себя самостоятельно !!!
RolandoMySQLDBA

12

Позвольте мне сказать это так, помните GameSpy Arcade начала / середины 2000-х годов? Он запускал тысячи игр, и все они работали на SQL Server и поддерживали десятки тысяч пользователей одновременно (да, у нас было несколько SQL-серверов, выполнявших различные операции). Это все о дизайне базы данных и о том, как вы используете систему. Сделайте это правильно, и ваш проект будет успешным, сделайте это неправильно, и ваш проект потерпит неудачу.


Приятно знать эту информацию о GameSpy, особенно с тех пор, как я ее использовал. Никогда не знал о части SQL все это время.
СтэнлиДжонс

1
Не забывайте, тогда самой новой версией была SQL 2000, и у нас есть более 1 миллиарда таблиц строк. У нас был довольно хороший представитель для поддержания систем в сети под высокой нагрузкой.
Мрденный

11

Правильный ответ во многом зависит от платформы, для которой вы программируете.

Так получилось, что кто-то задал этот вопрос для конкретной платформы в StackOverflow около 1,5 лет назад.

Будь то MySQL, SQL Server, Oracle, PostgreSQL или какая-либо другая СУБД, вы должны быть очень креативны с инфраструктурой базы данных. Если у вас есть открытая чековая книжка для аппаратного обеспечения и промышленная СУБД, Oracle для вас (если так, Oracle RAC будет более желательным). Если вы разрабатываете с использованием IIS и среды Microsoft, то это SQL Server. Если у вас есть проблемы с бюджетом и вам нужен внешний вид Oracle, выручите PostgreSQL. Если у вас есть бюджетные проблемы, живое воображение и вы хотите микроуправлять Storage Engine по своему вкусу, чтобы обеспечить соответствие требованиям ACID, высокоскоростное чтение и различные архитектуры репликации, я бы с вредом сказал, что MySQL.

СУБД должна быть наименьшей из ваших забот с MMORPG. Проблемы программирования всегда представляют большую рыбу для жарки. Итак, примите решение разумно и разумно, потому что какую бы СУБД вы ни выбрали, вам придется с этим жить (так же, как FaceBook должен жить с MySQL ).


2
Это третье упоминание, которое я видел сегодня в этой статье на Facebook. Это довольно хорошая статья.
Мрденный

2
+1. MySQL обычно игнорируется, но это действительно мощная СУБД.
СтэнлиДжонс

7

Это не правильный вопрос. Производительность вашей игры будет зависеть от выбранной вами архитектуры и стека технологий, а также от того, как она реализована. СУБД является лишь одним из компонентов стека. Я бы рискнул предположить, что СУБД вряд ли будет ограничивать производительность, если вы не очень плохо разбираетесь в архитектуре. Уровень вашего домена, кеширование и то, как вы распределяете и масштабируете сайт, скорее всего, будут более важными проблемами.


5

Любая СУБД будет зависеть от масштаба в зависимости от того, как она настроена, масштабирована и как приложение ее использует.

Я думаю, у вас есть два вопроса в одном. Во-первых, «какие СУБД способны эффективно сохранять игровые данные». (субъективно, imho) Второй: «Как мне масштабировать эту СУБД для работы с тысячами пользователей?»

Многие онлайн-сервисы нашли комбинацию MySQL и Memcached, чтобы обеспечить отличную производительность и масштаб. Однако наступает момент, когда это решение тоже падает. Тем не менее, это может быть именно то, что вам нужно.

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


4

Код, дизайн и ваши диски (для записи) определяют производительность в целом. Не платформа.


2

Вы могли бы взглянуть на CUBRID . Это СУБД с открытым исходным кодом, которая сейчас очень популярна в Южной Корее. Предполагается, что он работает лучше всего / очень быстро для веб-приложений с большим количеством пользователей (говорят, 50k или что-то в этом роде).


CUBRID, по сути, не только реляционная СУБД, но и обеспечивает функциональность объектов . Объект часть именно то , что нужно разработчики игр. В CUBRID вы можете легко создавать пользовательские типы. Например. таблица может иметь столбец, который имеет тип данных в виде другой таблицы, такой как: CREATE TABLE a (id INTEGER AUTO_INCREMENT PRIMARY KEY, имя VARCHAR (255)); CREATE TABLE b (id INTEGER AUTO_INCREMENT PRIMARY KEY, custom_column a); Этот тип функциональности очень важен для разработчиков игр. Популярные онлайн-игры в Южной Корее основаны на CUBRID.
Глаз

2

Я думаю, что любая из основных баз данных может справиться с нагрузкой, если хорошо спроектирована. К сожалению, я бы оценил, что менее 1% всех баз данных спроектированы хорошо. (Я лично имел дело с данными из буквально тысяч различных баз данных, выполняющих широкий спектр функций, поэтому я думаю, что у меня есть хорошее представление о нехватке качества, существующей в реальном мире.)

Я настоятельно рекомендую вам приобрести несколько книг по настройке производительности для выбранной вами базы данных и внимательно прочитать их, прежде чем приступить к разработке. Есть много вещей, которые помогут вашей базе данных работать лучше, которые должны быть разработаны с самого начала. Знание того, как писать производительные запросы и индексы дизайна, имеет решающее значение для получения хорошего дизайна. Этот тип обучения и заданная производительность не являются преждевременной оптимизацией. Нет никакой причины использовать известные методы убийства производительности в дизайне. Базы данных должны быть спроектированы для обеспечения производительности с самого начала.


0

У нас есть мобильные игры с тысячами игроков, и мы увидели огромное падение нагрузки, перейдя к постоянным пулам соединений IIS / .NET mysql. MySQL 5.1

Подумайте о том, чтобы хранить данные «только для записи» где-то еще, чтобы уменьшить нагрузку на любую выбранную вами базу данных Cassandra или даже системный журнал. Подумайте о том, как сохранить быстро изменяющиеся, быстро меняющиеся, но восстанавливаемые данные в таких файлах, как memcache, riak и т. Д.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.