Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
 СУБД для браузерной MMOG (C#)  [new]
AcTiViSioN911
Member

Откуда:
Сообщений: 35
Здравствуйте!
До недавнего времени мой сервер на C# работал с MySQL. Однако со временем я задумался о масштабах игры, а где-то вычитал что MySQL "не лучшим образом справляется с многочисленным чтением\записью в таблицы". Так вот, что же все таки выбрать в моем случае?

Собственно, вот такие критерии:
1) Максимальная скорость чтения\записи, в основном данные 1/0 или небольшие строки, не более. Сервер (C#) всего один, а клиентов будет много, ну вы понимаете.
2) Наличие бесплатной версии (например комьюнити мускул), ну или хотя-бы с адекватной ценой (если прирост производительности относительно бесплатных аналогов того стоит)
3) Наличие коннектора C# (только без танцев с бубном, VS-2013)

Оболочку для работы с БД я выбрал - Navicat Premium, очень удобная утилита. Однако, поддерживает она только MySQL, PostgreSQL, Oracle, SQLite и MariaDB. Если у вас будут предложения по другим СУБД, подскажите и оболочку т.к. с консолью возиться я не собираюсь.
25 ноя 14, 12:53    [16901319]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54849

Для мелкомягкого C# лучше всего подходит мелкомягкий MS SQL.

Posted via ActualForum NNTP Server 1.5

25 ноя 14, 13:26    [16901640]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
AcTiViSioN911
Member

Откуда:
Сообщений: 35
Dimitry Sibiryakov,

О MS SQL оставляют по большей части отрицательные отзывы, к тому же стоит он как два слона.
25 ноя 14, 13:49    [16901862]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54849

AcTiViSioN911
О MS SQL оставляют по большей части отрицательные отзывы, к тому же
стоит он как два слона.

О C# и ADO.NET отзывы ещё хуже, но это же тебя не остановило... А у MS SQL есть бесплатная
Express редакция, как ты и просил в стартовом посте.

Posted via ActualForum NNTP Server 1.5

25 ноя 14, 14:02    [16902020]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
AcTiViSioN911
Member

Откуда:
Сообщений: 35
Ну вообще я выбрал С# по совету одного знакомого, якобы это идеальный вариант для сервера, который общается с клиентом по Websocket's. После чего встал вопрос о хранении всех данных, которых будет не мало. Как мне кажется, лучше C# для этой затеи мне не найти.
25 ноя 14, 14:11    [16902138]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
AcTiViSioN911
Member

Откуда:
Сообщений: 35
Так то мне не принципиально на чем писать сервер и с какой СУБД его связывать. Главное - производительность, ну и чтоб все это дело было более-менее актуально на 2014 год)
25 ноя 14, 14:15    [16902167]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54849

AcTiViSioN911
Главное - производительность

В этом случае хуже, чем C# будут разве что только Java/Javascript и PHP.

Posted via ActualForum NNTP Server 1.5

25 ноя 14, 14:24    [16902246]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
AcTiViSioN911
Member

Откуда:
Сообщений: 35
Dimitry Sibiryakov,

Да это понятно, а вот что может быть лучше если делать ставку именно на СУБД?
25 ноя 14, 14:27    [16902289]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
Вася Уткин
Guest
AcTiViSioN911
Так то мне не принципиально на чем писать сервер и с какой СУБД его связывать. Главное - производительность, ну и чтоб все это дело было более-менее актуально на 2014 год)

MariaDB (для критичных к скорости таблиц выбирай тип Aria, для критичных к потере выбирай тип XtraDB) + ADO.NET + C# + WebSockets

Ещё memcached можешь посмотреть, если к нему можно без плясок конектится из C#.


Или MariaDB + HandlerSocket + (MPI + C++) + WebSockets
25 ноя 14, 14:37    [16902383]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
AcTiViSioN911
Member

Откуда:
Сообщений: 35
Вася Уткин,

А вот HandlerSocket - это уже интересно. Использовать его получится только на С++ с MPI? Просто на шарпе у меня уже есть готовый сервер с Websockets. Если так, то мне нужны хотя-бы образцы этого дела.
25 ноя 14, 15:05    [16902600]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
Вася Уткин
Guest
AcTiViSioN911
Вася Уткин,

А вот HandlerSocket - это уже интересно. Использовать его получится только на С++ с MPI? Просто на шарпе у меня уже есть готовый сервер с Websockets. Если так, то мне нужны хотя-бы образцы этого дела.

HandlerSockets к MPI не имеет никакого отношения, так что можно и без MPI, про MPI это я так, к слову, что с ним просто можно будет распределенные WEB-сервера делать не только на TCP/UDP, но и на SDP/uDAPL, которые на порядок производительнее в некоторых случаях - это если вы решите хранить промежуточные данные не в MySQL или memcached и прочих, а в собственном приложении, т.е. делать систему на десятки миллионов пользователей.

Помимо стандартного подключения к MySQL, реализовали ещё 2 варианта подключения: Memcached-plugin (MySQL в этом случае выглядит как memcached) и HandlerSockets - их точно можно на C/C++. Насчет C# - не знаю, попробуйте нагуглить, если расскажите или попробуете - будет классно.
25 ноя 14, 16:05    [16903081]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 28355
Erlang + Riak :)
25 ноя 14, 16:11    [16903116]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
AcTiViSioN911
Member

Откуда:
Сообщений: 35
skyANA,
Это, по моему, слишком сложно :)

Вася Уткин,
Не хотелось бы связываться с С++ т.к. будут проблемы с управлением памятью, а знаний и опыта у меня не так уж и много.
Загуглив "HandlerSockets для C#" я понял, что без бубна тут точно не обойтись т.к. информации просто нет.
В общем, пока буду работать с MariaDB. Вот вы писали про таблицу Aria, какие у нее минусы?
25 ноя 14, 16:28    [16903244]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
Вася Уткин
Guest
AcTiViSioN911
Вася Уткин,
Не хотелось бы связываться с С++ т.к. будут проблемы с управлением памятью, а знаний и опыта у меня не так уж и много.

Проблем с управлением памяти в C++ уже лет 10 нет, в отличие от C. Но лучше используйте С# - то что знаете.

AcTiViSioN911
Загуглив "HandlerSockets для C#" я понял, что без бубна тут точно не обойтись т.к. информации просто нет.
В общем, пока буду работать с MariaDB. Вот вы писали про таблицу Aria, какие у нее минусы?

Она утонула :)
Aria - нетранзакционный no-ACID дивжок, т.е. нет внешних ключей (нет C), нет отката транзакций из нескольких изменений (нет A), т.е. транзакций нет вообще (нет I) и нет записи в лог транзакций (нет D).
25 ноя 14, 16:39    [16903328]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
AcTiViSioN911
Member

Откуда:
Сообщений: 35
Вася Уткин,
ACID - пока-что я не пользовался ничем из этого, и все работает достаточно неплохо :)
Сейчас немножко перенастроил сервер под MariaDB и выполнил несколько операций с таблицей Aria, все работает как надо.

В оболочке Navicat есть несколько типов таблиц, но XtraDB там нет, только InnoDB. Это ошибка или как? У встроенной утилиты HeidiSQL от MariaDB так же нет XtraDB.
25 ноя 14, 16:52    [16903412]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67534
Блог
AcTiViSioN911, при том подходе, который Вы демонстрируете - возьму то-другое-третье по советам и как-нибудь соединю в продукт одиночки - вряд ли Вы упрётесь в настоящие ограничения хоть какой-нибудь СУБД. Достаточно долго Вы будете стучаться в собственные неудачные решения. Поэтому я бы посоветовал не искать СУБД, а учиться использовать текущее и в архитектуре закладывать шардинг.
25 ноя 14, 16:59    [16903459]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
AcTiViSioN911
Member

Откуда:
Сообщений: 35
Вася Уткин,

И еще такой вопрос, мой сервер продолжает ссылаться на MySql.Data (который я брал из MySQL Community), так и оставить? Или у MariaDB были какие-либо изменения, о которых с первого взгляда не узнать? Я конечно скачал и установил различные коннекторы от MariaDB, но нигде их не использовал, все и так работает.
25 ноя 14, 17:01    [16903478]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
AcTiViSioN911
Member

Откуда:
Сообщений: 35
softwarer,

Думаю вы правы, буду продолжать работать с СУБД на базе MySQL, а далее посмотрим.
25 ноя 14, 17:04    [16903504]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
AcTiViSioN911
Member

Откуда:
Сообщений: 35
Вася Уткин,

Еще уточню, как я с этим работаю:
using MySql.Data.MySqlClient;
...
MySqlConnection MySqlConnection_Users = new MySqlConnection("server=localhost;user id=root;database=users;password=root911");
MySqlAdapter.SelectCommand = new MySqlCommand("SELECT Login,Password FROM users", MySqlConnection_Users);
...


Уж не знаю насколько правильно это для MariaDB т.к. образцов C# + MariaDB не нашел.
25 ноя 14, 17:11    [16903540]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
Вася Уткин
Guest
AcTiViSioN911
Вася Уткин,

Еще уточню, как я с этим работаю:
using MySql.Data.MySqlClient;
...
MySqlConnection MySqlConnection_Users = new MySqlConnection("server=localhost;user id=root;database=users;password=root911");
MySqlAdapter.SelectCommand = new MySqlCommand("SELECT Login,Password FROM users", MySqlConnection_Users);
...


Уж не знаю насколько правильно это для MariaDB т.к. образцов C# + MariaDB не нашел.

Как работали раньше с MySQL, так же и работайте, там максимальная совместимость.

https://ru.wikipedia.org/wiki/XtraDB
XtraDB полностью обратно совместим с InnoDB (в том числе по формату файлов), и идентифицирует себя в MariaDB как «ENGINE = InnoDB» (точно так же, как и InnoDB), и поэтому может быть использован в качестве замены для стандартного InnoDB.

Движок InnoDB в СУБД MariaDB это и есть движок XtraDB :)
25 ноя 14, 17:28    [16903665]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
Вася Уткин
Guest
AcTiViSioN911, ну и вы не забываете конечно же использовать параметризованные prepared-запросы? Чтобы каждый раз SQL-запрос не парсился.

И если с шардингом пока заморачиваться не хотите, то используйте partitioning, он есть в MariaDB.
25 ноя 14, 17:33    [16903692]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
AcTiViSioN911
Member

Откуда:
Сообщений: 35
Вася Уткин,

Вот пока ничего такого не делал, только обыкновенные запросы к БД (из примеров) и мне этого, почти всегда, хватает.
Давайте рассмотрим вот этот кусок кода:
            string[] MassCheck = MySqlCommand("get", "SELECT login FROM users WHERE login = '" + Login + "'", "users", "");
            if (MassCheck[0] == "Error") // Если такого логина нет, продолжить...
            {
                MySqlCommand("send", "INSERT INTO users (login,password,nick) VALUES ('" + Login + "','" + Password + "','None')", "users", ""); // Записать нового пользователя
                string[] MassID = MySqlCommand("get", "SELECT id FROM users WHERE login = '" + Login + "'", "users", ""); // Получить последний записанный номер (ID в таблице)
                MySqlCommand("send", "CREATE TABLE user_" + MassID[2] + "_1 LIKE user_original", "buildings", ""); // Создать новую таблицу
                MySqlCommand("send", "INSERT INTO user_" + MassID[2] + "_1 SELECT * FROM user_original", "buildings", ""); // Заполнить новую таблицу по образцу

Тут происходит проверка на существование логина в БД. Если такого логина нет - данные записываются в БД и создается отдельная таблица для нового юзера. Тут целых 4 обращения к БД, как еще можно это упростить?
25 ноя 14, 17:50    [16903803]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
Вася Уткин
Guest
AcTiViSioN911
Вася Уткин,

Вот пока ничего такого не делал, только обыкновенные запросы к БД (из примеров) и мне этого, почти всегда, хватает.
Давайте рассмотрим вот этот кусок кода:
            string[] MassCheck = MySqlCommand("get", "SELECT login FROM users WHERE login = '" + Login + "'", "users", "");
            if (MassCheck[0] == "Error") // Если такого логина нет, продолжить...
            {
                MySqlCommand("send", "INSERT INTO users (login,password,nick) VALUES ('" + Login + "','" + Password + "','None')", "users", ""); // Записать нового пользователя
                string[] MassID = MySqlCommand("get", "SELECT id FROM users WHERE login = '" + Login + "'", "users", ""); // Получить последний записанный номер (ID в таблице)
                MySqlCommand("send", "CREATE TABLE user_" + MassID[2] + "_1 LIKE user_original", "buildings", ""); // Создать новую таблицу
                MySqlCommand("send", "INSERT INTO user_" + MassID[2] + "_1 SELECT * FROM user_original", "buildings", ""); // Заполнить новую таблицу по образцу

Тут происходит проверка на существование логина в БД. Если такого логина нет - данные записываются в БД и создается отдельная таблица для нового юзера. Тут целых 4 обращения к БД, как еще можно это упростить?

Для начала перепишите этот код с учетом этих рекомендаций:
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.prepare(v=vs.110).aspx
25 ноя 14, 17:54    [16903839]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
AcTiViSioN911
Member

Откуда:
Сообщений: 35
Вася Уткин,

Взял за образец. Команда выполнилась 2 раза, разными способами.
        private static void SqlCommandPrepareEx()
        {
            using (MySqlConnection connection = new MySqlConnection("server=localhost;user id=root;database=users;password=911911"))
            {
                connection.Open();
                MySqlCommand command = new MySqlCommand(null, connection);
                command.CommandText = "INSERT INTO users (Login, Password) VALUES (@id, @desc)";
                MySqlParameter idParam = new MySqlParameter("@id", MySqlDbType.Int16, 0);
                MySqlParameter descParam = new MySqlParameter("@desc", MySqlDbType.Text, 100);

                // Первый способ
                idParam.Value = 20;
                descParam.Value = "First Region";
                command.Parameters.Add(idParam);
                command.Parameters.Add(descParam);
                command.Prepare();
                command.ExecuteNonQuery();

                // Второй способ
                command.Parameters[0].Value = 21;
                command.Parameters[1].Value = "Second Region";
                command.ExecuteNonQuery();
            }
        }

И что мне это дало?
25 ноя 14, 18:04    [16903909]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54849

AcTiViSioN911
Давайте рассмотрим вот этот кусок кода

*FACEPALM*
С таким кодом Вам в общем-то, как и сказал Softwarer, всё равно на каком языке
писать и какой СУБД пользоваться.

Posted via ActualForum NNTP Server 1.5

25 ноя 14, 18:11    [16903941]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
Все форумы / Сравнение СУБД Ответить