powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / СУБД для браузерной MMOG (C#)
25 сообщений из 87, страница 1 из 4
СУБД для браузерной MMOG (C#)
    #38815984
AcTiViSioN911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!
До недавнего времени мой сервер на C# работал с MySQL. Однако со временем я задумался о масштабах игры, а где-то вычитал что MySQL "не лучшим образом справляется с многочисленным чтением\записью в таблицы". Так вот, что же все таки выбрать в моем случае?

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

Оболочку для работы с БД я выбрал - Navicat Premium, очень удобная утилита. Однако, поддерживает она только MySQL, PostgreSQL, Oracle, SQLite и MariaDB. Если у вас будут предложения по другим СУБД, подскажите и оболочку т.к. с консолью возиться я не собираюсь.
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38816037
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для мелкомягкого C# лучше всего подходит мелкомягкий MS SQL.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38816069
AcTiViSioN911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

О MS SQL оставляют по большей части отрицательные отзывы, к тому же стоит он как два слона.
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38816093
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AcTiViSioN911О MS SQL оставляют по большей части отрицательные отзывы, к тому же
стоит он как два слона.
О C# и ADO.NET отзывы ещё хуже, но это же тебя не остановило... А у MS SQL есть бесплатная
Express редакция, как ты и просил в стартовом посте.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38816112
AcTiViSioN911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну вообще я выбрал С# по совету одного знакомого, якобы это идеальный вариант для сервера, который общается с клиентом по Websocket's. После чего встал вопрос о хранении всех данных, которых будет не мало. Как мне кажется, лучше C# для этой затеи мне не найти.
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38816116
AcTiViSioN911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так то мне не принципиально на чем писать сервер и с какой СУБД его связывать. Главное - производительность, ну и чтоб все это дело было более-менее актуально на 2014 год)
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38816132
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AcTiViSioN911Главное - производительность
В этом случае хуже, чем C# будут разве что только Java/Javascript и PHP.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38816136
AcTiViSioN911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

Да это понятно, а вот что может быть лучше если делать ставку именно на СУБД?
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38816157
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AcTiViSioN911Так то мне не принципиально на чем писать сервер и с какой СУБД его связывать. Главное - производительность, ну и чтоб все это дело было более-менее актуально на 2014 год)
MariaDB (для критичных к скорости таблиц выбирай тип Aria, для критичных к потере выбирай тип XtraDB) + ADO.NET + C# + WebSockets

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


Или MariaDB + HandlerSocket + (MPI + C++) + WebSockets
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38816189
AcTiViSioN911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вася Уткин,

А вот HandlerSocket - это уже интересно. Использовать его получится только на С++ с MPI? Просто на шарпе у меня уже есть готовый сервер с Websockets. Если так, то мне нужны хотя-бы образцы этого дела.
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38816287
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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# - не знаю, попробуйте нагуглить, если расскажите или попробуете - будет классно.
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38816300
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Erlang + Riak :)
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38816335
AcTiViSioN911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA,
Это, по моему, слишком сложно :)

Вася Уткин,
Не хотелось бы связываться с С++ т.к. будут проблемы с управлением памятью, а знаний и опыта у меня не так уж и много.
Загуглив "HandlerSockets для C#" я понял, что без бубна тут точно не обойтись т.к. информации просто нет.
В общем, пока буду работать с MariaDB. Вот вы писали про таблицу Aria, какие у нее минусы?
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38816354
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AcTiViSioN911Вася Уткин,
Не хотелось бы связываться с С++ т.к. будут проблемы с управлением памятью, а знаний и опыта у меня не так уж и много.
Проблем с управлением памяти в C++ уже лет 10 нет, в отличие от C. Но лучше используйте С# - то что знаете.

AcTiViSioN911Загуглив "HandlerSockets для C#" я понял, что без бубна тут точно не обойтись т.к. информации просто нет.
В общем, пока буду работать с MariaDB. Вот вы писали про таблицу Aria, какие у нее минусы?
Она утонула :)
Aria - нетранзакционный no- ACID дивжок, т.е. нет внешних ключей (нет C), нет отката транзакций из нескольких изменений (нет A), т.е. транзакций нет вообще (нет I) и нет записи в лог транзакций (нет D).
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38816379
AcTiViSioN911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вася Уткин,
ACID - пока-что я не пользовался ничем из этого, и все работает достаточно неплохо :)
Сейчас немножко перенастроил сервер под MariaDB и выполнил несколько операций с таблицей Aria, все работает как надо.

В оболочке Navicat есть несколько типов таблиц, но XtraDB там нет, только InnoDB. Это ошибка или как? У встроенной утилиты HeidiSQL от MariaDB так же нет XtraDB.
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38816395
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AcTiViSioN911, при том подходе, который Вы демонстрируете - возьму то-другое-третье по советам и как-нибудь соединю в продукт одиночки - вряд ли Вы упрётесь в настоящие ограничения хоть какой-нибудь СУБД. Достаточно долго Вы будете стучаться в собственные неудачные решения. Поэтому я бы посоветовал не искать СУБД, а учиться использовать текущее и в архитектуре закладывать шардинг.
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38816399
AcTiViSioN911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вася Уткин,

И еще такой вопрос, мой сервер продолжает ссылаться на MySql.Data (который я брал из MySQL Community), так и оставить? Или у MariaDB были какие-либо изменения, о которых с первого взгляда не узнать? Я конечно скачал и установил различные коннекторы от MariaDB, но нигде их не использовал, все и так работает.
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38816404
AcTiViSioN911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer,

Думаю вы правы, буду продолжать работать с СУБД на базе MySQL, а далее посмотрим.
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38816421
AcTiViSioN911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вася Уткин,

Еще уточню, как я с этим работаю:
Код: c#
1.
2.
3.
4.
5.
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 не нашел.
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38816453
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AcTiViSioN911Вася Уткин,

Еще уточню, как я с этим работаю:
Код: c#
1.
2.
3.
4.
5.
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 :)
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38816457
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AcTiViSioN911 , ну и вы не забываете конечно же использовать параметризованные prepared-запросы? Чтобы каждый раз SQL-запрос не парсился.

И если с шардингом пока заморачиваться не хотите, то используйте partitioning , он есть в MariaDB.
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38816489
AcTiViSioN911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вася Уткин,

Вот пока ничего такого не делал, только обыкновенные запросы к БД (из примеров) и мне этого, почти всегда, хватает.
Давайте рассмотрим вот этот кусок кода:
Код: c#
1.
2.
3.
4.
5.
6.
7.
            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 обращения к БД, как еще можно это упростить?
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38816500
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AcTiViSioN911Вася Уткин,

Вот пока ничего такого не делал, только обыкновенные запросы к БД (из примеров) и мне этого, почти всегда, хватает.
Давайте рассмотрим вот этот кусок кода:
Код: c#
1.
2.
3.
4.
5.
6.
7.
            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
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38816510
AcTiViSioN911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вася Уткин,

Взял за образец. Команда выполнилась 2 раза, разными способами.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
        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();
            }
        }


И что мне это дало?
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38816518
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AcTiViSioN911Давайте рассмотрим вот этот кусок кода
*FACEPALM*
С таким кодом Вам в общем-то, как и сказал Softwarer , всё равно на каком языке
писать и какой СУБД пользоваться.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25 сообщений из 87, страница 1 из 4
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / СУБД для браузерной MMOG (C#)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]