powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / СУБД для браузерной MMOG (C#)
87 сообщений из 87, показаны все 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
СУБД для браузерной MMOG (C#)
    #38816525
AcTiViSioN911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

Ну так это самая простая операция, происходящая всего 1 раз для каждого клиента. Меня сейчас интересует лишь одно - как правильно написать сервер, чтобы не было ничего "кривого" или лишнего.
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38816531
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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();
            }
        }


И что мне это дало?
Еслиб было написано чуть правильней - это дало ускорение раз в 10 для подобных простых запросов к noACID движку Aria.

1. Весь тот код, что до .Prepare(); делайте один раз в конструкторе - это выполняется долго.
2. А следующие строчки выполняются быстро:
command.Parameters[0].Value = 21;
command.Parameters[1].Value = "Second Region";
command.ExecuteNonQuery();
делайте их каждый раз, когда надо обратиться к базе - фактически это no-SQL обращение к базе.
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38816532
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AcTiViSioN911Меня сейчас интересует лишь одно - как правильно написать сервер,
чтобы не было ничего "кривого" или лишнего.
Это примерно двухсеместровый курс лекций. Вряд ли кто-то здесь будет Вам его читать.
Пишите как умеете, придёт опыт - переделаете.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38816565
AcTiViSioN911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вася Уткин,

Что-то до меня не дошло, что именно нужно сделать О_о
Вот то, что мне нужно постоянно изменять:
Код: c#
1.
command.CommandText = "INSERT INTO users (Login, Password) VALUES (@id, @desc)";



Тогда в основном коде будет написано так:
Код: c#
1.
SqlCommandPrepareEx("INSERT INTO users (Login, Password) VALUES ('login','password')"); // записать логин\пароль



А что должно быть в самом SqlCommandPrepareEx? Ведь я уже заранее пишу какими должны быть логин и пароль, зачем тогда параметры?
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38816568
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Таких
Код: c#
1.
                string[] MassID = MySqlCommand("get", "SELECT id FROM users WHERE login = '" + Login + "'", "users", ""); // Получить последний записанный номер (ID в таблице)


или таких
Код: c#
1.
SqlCommandPrepareEx("INSERT INTO users (Login, Password) VALUES ('login','password')"); // записать логин\пароль


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

Работает и так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SqlCommandPrepareEx("INSERT INTO users (Login, Password) VALUES ('1', '2')");

...

        private static void SqlCommandPrepareEx(string SQL)
        {
            using (MySqlConnection connection = new MySqlConnection("server=localhost;user id=root;database=users;password=911911"))
            {
                connection.Open();
                MySqlCommand command = new MySqlCommand(null, connection);
                command.CommandText = SQL;
                command.ExecuteNonQuery();
            }
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38816572
AcTiViSioN911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вася Уткин,

Хм, ну хорошо. Попробую обойтись без этого, раз вы так говорите. Сам то я разницы не вижу)
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38816573
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AcTiViSioN911Собственно, вот такие критерии:
1) Максимальная скорость чтения\записи, ...
AcTiViSioN911Работает и так:
Ну понятно...
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38816678
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, ну, да... Пришла пора курсовых...
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38816685
AcTiViSioN911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pkarklin,

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

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

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

Так все мы стремимся к идеалу, пусть даже это и невозможно. Я получил достаточно информации чтобы продолжить работу.
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38816706
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AcTiViSioN911Я получил достаточно информации чтобы продолжить работу.

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

Не ИМХО а нужен)) Не повезло в жизни, учусь всему сам...

Вот так годится? Я старался учесть все требования...
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
            int Time = DateTime.Now.Millisecond; // Таймер - старт
            string[] Strings = new string[2]; // Создаю массив для 2х строк
            Strings[0] = "login";
            Strings[1] = "password";
            MySqlInsert(Strings); // Вставляю строки

...

        public void MySqlInsert(string[] Parameters)
        {
            var MySql = new MySqlCommand { Connection = new MySqlConnection("server=localhost;user id=root;database=users;password=911911"), CommandText = "INSERT INTO users (Login,Password) VALUES (" };
            for (int CurValue = 0; CurValue < Parameters.Length; CurValue++) // Подготовка VALUES и создание параметров
            {
                MySql.CommandText += "?" + CurValue; // Подставить в VALUES
                MySql.Parameters.AddWithValue("?" + CurValue, Parameters[CurValue]); // Добавить параметр
                if (CurValue < Parameters.Length - 1) MySql.CommandText += ",";
            }
            MySql.CommandText += ")";
            MySql.Connection.Open(); // Открыть соединение
            MySql.ExecuteNonQuery(); // Записать
            MySql.Connection.Close(); // Закрыть соединение
        }
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38816725
AcTiViSioN911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ой забыл, в конце:
Код: c#
1.
Console.WriteLine(DateTime.Now.Millisecond - Time);


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

Я уже говорил про соответствующий раздел форума.
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38816732
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AcTiViSioN911это нормальный результат? Или слишком медленно?

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

Эм, мне создавать отдельную тему ради одного вопроса? Этот топик уже исчерпал себя, и не думаю что на этом форуме "набивание постов" как-то наказывается. К тому же, ТС тут я.
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38816736
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AcTiViSioN911Эм, мне создавать отдельную тему ради одного вопроса?

Вы догадливый! В третий раз повторяю "в соответствующем разделе форума".

AcTiViSioN911Этот топик уже исчерпал себя, и не думаю что на этом форуме "набивание постов" как-то наказывается.

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

AcTiViSioN911К тому же, ТС тут я.

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

Не ИМХО а нужен)) Не повезло в жизни, учусь всему сам...

Вот так годится? Я старался учесть все требования...
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
            int Time = DateTime.Now.Millisecond; // Таймер - старт
            string[] Strings = new string[2]; // Создаю массив для 2х строк
            Strings[0] = "login";
            Strings[1] = "password";
            MySqlInsert(Strings); // Вставляю строки

...

        public void MySqlInsert(string[] Parameters)
        {
            var MySql = new MySqlCommand { Connection = new MySqlConnection("server=localhost;user id=root;database=users;password=911911"), CommandText = "INSERT INTO users (Login,Password) VALUES (" };
            for (int CurValue = 0; CurValue < Parameters.Length; CurValue++) // Подготовка VALUES и создание параметров
            {
                MySql.CommandText += "?" + CurValue; // Подставить в VALUES
                MySql.Parameters.AddWithValue("?" + CurValue, Parameters[CurValue]); // Добавить параметр
                if (CurValue < Parameters.Length - 1) MySql.CommandText += ",";
            }
            MySql.CommandText += ")";
            MySql.Connection.Open(); // Открыть соединение
            MySql.ExecuteNonQuery(); // Записать
            MySql.Connection.Close(); // Закрыть соединение
        }



Я всё думал, почему многие считают SQL-СУБД медленными (я различаю SQL/noSQL и ACID/noACID). Ведь по сути единожды подготавливаются все запросы и парсятся. А затем при каждом обращении к базе отсылаются только параметры. Что в memcached получить key-value, что в Aria(noACID) с prepared-SQL(noSQL) получить ответ на запрос к одной таблице с проиндексированными key-value, через стандартное MySQL подключение.
А сейчас понимаю, для многих prepared-запросы - это выше их понимания :)
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38816803
AcTiViSioN911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вася Уткин,

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

Или можно менять и другие значения, например:
"INSERT INTO users (Login,Password) VALUES (?0,?1)"
сделать так:
"INSERT INTO ?0 (?1, .... ) VALUES (?10, .... )"
Так можно?
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38816807
AcTiViSioN911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вася Уткин,

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

SQLite вам будет достаточно.
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38816858
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AcTiViSioN911Вы предлагаете мне открыть соединения для 1000+ таблиц, а потом не закрывая их писать, читать и т.д.?Вам предлагают спроектировать ваши SQL-запросы и подготавливать параметризованные на нужных соединениях в нужных количествах.

P.S. И, да - урежьте осетра про тысячи таблиц: если вы постоянно работаете вблизи верхних пределов, то, вероятно, в этом есть что-то неправильное.
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38816923
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AcTiViSioN911Взял за образец. Команда выполнилась 2 раза, разными способами.
<...>
И что мне это дало?Почитайте про SQL injection : раз , два
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38817269
AcTiViSioN911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov,

А как быть с тысячью клиентов? У каждого должна быть своя таблица, а клиентов будет не одна тысяча, имею ввиду именно онлайн.
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38817294
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AcTiViSioN911У каждого должна быть своя таблица
Кому должна?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38817314
AcTiViSioN911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

Ладно, может я не знаю всех особенностей СУБД. У каждого клиента будет от 200 и более параметров (начиная от логина/пароля и т.д.). Можно ли сделать все это в одной таблице, не потеряв в скорости чтения/записи?
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38817329
AcTiViSioN911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

Так же добавлю, что на сервере по таймеру (каждую минуту) для игроков в онлайне будут обновляться некоторые данные, в этой же таблице.
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38817344
Зайцев Фёдор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AcTiViSioN911Ладно, может я не знаю всех особенностей СУБД.
Ладно
AcTiViSioN911У каждого клиента будет от 200 и более параметров (начиная от логина/пароля и т.д.). Можно ли сделать все это в одной таблице, не потеряв в скорости чтения/записи?
Чего не нужно делать точно, так это создавать по таблице на клиента.
А вот будет ли таблица для параметров именно одна - это другой вопрос. М.б. их 2 будет, а м.б. 19.
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38817360
Зайцев Фёдор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AcTiViSioN911Так же добавлю, что на сервере по таймеру (каждую минуту) для игроков в онлайне будут обновляться некоторые данные, в этой же таблице.
Звучит как не очень хорошая идея. Не лучше ли менять данные по мере из фактического изменения?

Игрок А стоит и афкает в тюрьме 329485 минут.
Игрок Б только что приобрёл Сияющее Копьё Разгневанного Школьника.

Неужели для них одинаково количество поводов писать что-либо в базу?

IMHO, вам, AcTiViSioN911, весь этот разговор нужно отложить и заняться изучением проектирования.
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38817451
AcTiViSioN911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Зайцев Фёдор,

Так вот я сейчас и нахожусь на этой стадии. Мне необходимо знать максимальные размеры у таблиц, чтобы грамотно распределить данные. Таблицы для каждого пользователя - это я конечно загнул, меня просто интересует вопрос производительности. Какой предел параметров (столбцов) установить на каждую таблицу (100, 200 ... ), если брать в расчет запись и чтение каждую минуту для 1000 игроков. Хотелось бы грамотно их распределить.

По поводу записей в таблицы. Пусть у игрока сейчас 1000 ед. какого-либо ресурса, а через 15 минут он захочет потратить 500 ед. Получается, что через 15 минут к его кредитам на счету добавятся еще 150 (по 10 в минуту), после чего будет списана сама стоимость покупки, за которой последует запись в таблицу (650). Как я думаю, это неплохая схема. Все остальные вычисления (как прибавляется по 10 ед. в минуту) будут происходить у клиента.
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38817458
AcTiViSioN911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Зайцев Фёдор,

Так же добавлю, что при каждой авторизации игрока, это числа (например ресурсы) будут перезаписаны сервером, в одной они таблице или в нескольких.
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38817467
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AcTiViSioN911,

извиняюсь, а Вы что-нибудь на эту тему читали?
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38817471
Зайцев Фёдор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AcTiViSioN911Так же добавлю, что ...
Текущее обсуждение несколько вышло за рамки раздела и топика.

Могу добавить только, что на данном этапе разработки можно использовать любую СУБД.
Момент, при котором вы столкнётесь с проблемами масштабирования и производительности не наступит в обозримом будущем - намного раньше придётся бороться с ошибками проектирования.
Мне так кажется.
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38817472
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AcTiViSioN911Как я думаю, это неплохая схема.
Первое же отключение электричества заставит в этом усомниться.
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38817485
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AcTiViSioN911при каждой авторизации игрока, это числа (например ресурсы) будут
перезаписаны сервером
При такой архитектуре СУБД не только не нужна, но и вообще противопоказана.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38817517
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО элементарный анализ данных не проведён, а уже какой-то код написан, какая-то архитектура придумана.

1. Новый пользователь, какие у него в начале данные, какого объёма, как быстро они изменяются?
2. Пользователь плотно играет в игрушку год, какие у него в итоге данные, какого объёма?
3. Пользователь играет в течение года, но редко, какие у него в итоге данные, какого объёма?

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

softwarer,
В каком смысле? Данные из БД сотрутся? Быть может я недостаточно точно выразился.
Число 1000 (как любой другой ресурс игрока) было записано 26.11.2014 в 12:00. И не важно когда произойдет их изменение (через 15 минут или 2 недели) - накапавшие за пройденное время ресурсы (скажем, 10 ед. в минуту) так или иначе добавятся к общему числу, когда это будет необходимо (авторизация клиента или совершение покупки).

Dimitry Sibiryakov,
Тогда где же мне хранить данные клиентов? Всего-то нужно иметь возможность быстро считывать и записывать строки.
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38817532
AcTiViSioN911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAИМХО элементарный анализ данных не проведён, а уже какой-то код написан, какая-то архитектура придумана.

1. Новый пользователь, какие у него в начале данные, какого объёма, как быстро они изменяются?
2. Пользователь плотно играет в игрушку год, какие у него в итоге данные, какого объёма?
3. Пользователь играет в течение года, но редко, какие у него в итоге данные, какого объёма?

Ну и по каждому пользователю проанализировать частоту обращений и характер обращений к серверу. Как это зависит от геймплея?

Новый пользователь будет иметь все те-же таблицы что и плотно играющий 10 лет игрок. Разве что заполнены строки будут не числами а нулями/пустотой (как там позволяет БД). Игровые возможности уже практически расписаны, вскоре можно будет создавать, собственно, таблицы. Сейчас у меня готово то - регистрация\авторизация и некоторые стандартные таблицы.
Если исходить из расчета, что у каждого игрока не будет своей таблицы, то тут даже проще - не было у человека автомобиля - и строки в таблице "Автомобили" нет. А как появился - так сразу новая запись.
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38817656
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AcTiViSioN911Тогда где же мне хранить данные клиентов? Всего-то нужно иметь
возможность быстро считывать и записывать строки.
В файле. А файл - в файловой системе.
Ты эта... определись: записывать строки или полное состояние персонажа по таймеру.
Впрочем, от этого всего лишь зависит с какими флагами открывать этот файл...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38817707
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[AcTiViSioN911]Здравствуйте!
До недавнего времени мой сервер на C# работал с MySQL. Однако со временем я задумался о масштабах игры, а где-то вычитал что MySQL "не лучшим образом справляется с многочисленным чтением\записью в таблицы". Так вот, что же все таки выбрать в моем случае?

для хранения говноданных любая говносубд подойдет, даже MySQL.
тем более что без MyISAM таблиц, на одном только Inno он не так уж и плох.



Собственно, вот такие критерии:


твои критерии наверняка не прокатят. я хрен знает как долго этим занимаюсь, и то критерии бы не смог сформулировать.


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


ну, один из критериев оказался таки все же приемлимым - чтобы бесплатно.

тут сразу спектр резко сокращается.

MySQL, fire bird, postgres.

рекомендую остаться на мускле, заменив все на innodb. проблемы производительности решать про мере их появления, а не надумывать их.
Оболочку для работы с БД я выбрал - Navicat Premium, очень удобная утилита. Однако, поддерживает она только MySQL, PostgreSQL, Oracle, SQLite и MariaDB. Если у вас будут предложения по другим СУБД, подскажите и оболочку т.к. с консолью возиться я не собираюсь.[/quot]
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38817709
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если у вас будут предложения по другим СУБД, подскажите и оболочку т.к. с консолью возиться я не собираюсь.[/quot]

а, это тогда тебе увольняться надо по проф непригодности.
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38817716
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AcTiViSioN911Dimitry Sibiryakov,

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


не читай надписи на заборах .
инет длинный, а идиотов много.

sqlserver замечательная СУБД и бесплатная версия у них есть.
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38817721
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вася Уткин,
C в Acid это не внешние ключи
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38817760
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivВася Уткин,
C в Acid это не внешние ключи
А что это? Посмотрим, сумеете ли вы объяснить это автору топика короче и понятней, чем я :)

C в Acid - согласованность - включает в себя в том числе и внешние ключи (остальная часть (C)согласованности сильно пересекается с A и I, т.к. достигается за их счет и за счет корректности SQL-statement-ов в транзакции, написанных разработчиком).
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38817761
AcTiViSioN911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv,

Все же рекомендуете innodb вместо Aria (noACID)?
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38818750
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AcTiViSioN911Dimitry Sibiryakov,

Ладно, может я не знаю всех особенностей СУБД. У каждого клиента будет от 200 и более параметров (начиная от логина/пароля и т.д.). Можно ли сделать все это в одной таблице, не потеряв в скорости чтения/записи?

Не можно, а НУЖНО !
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38818753
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AcTiViSioN911MasterZiv,

Все же рекомендуете innodb вместо Aria (noACID)?

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

Все же рекомендуете innodb вместо Aria (noACID)?

нет, не ACID я не буду рекомендовать никому. InnoDB или Maria .
Maria - такого нет вообще, есть Aria и MariaDB, вы что имели ввиду?
Если имели ввиду "InnoDB или Aria" - то вы только что предложили не ACID движок :)
Если имели ввиду "InnoDB или MariaDB" - то вы дали на выбор: "отдельный движок или целую СУБД".
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38818780
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вася УткинMasterZivпропущено...


нет, не ACID я не буду рекомендовать никому. InnoDB или Maria .
Maria - такого нет вообще, есть Aria и MariaDB, вы что имели ввиду?

MariaDB
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38819221
Фотография EDUARD SAPOTSKI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AcTiViSioN911MasterZiv,

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

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
MySqlCommand MySql_Users = new MySqlCommand(null, new MySqlConnection("server=localhost;user id=root;database=users;password=911911"));

        public void Start()
        {
            // Открываем соединение с БД USERS
            MySql_Users.Connection.Open();
            // Получаем id вставленной записи
            Console.WriteLine(MySqlSend("INSERT INTO users (login,password,nick) VALUES (?0,?1,?2)", "login;password;nick", MySql_Users)[0]);
            // Закрываем
            MySql_Users.Connection.Close();
        }

Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
        public ArrayList MySqlSend(string Command, string ParametersText, MySqlCommand DataBase)
        {
            ArrayList Argument = new ArrayList();
            try
            {
                DataBase.CommandText = Command;
                ArrayList Parameters = new ArrayList();
                foreach (string s in ParametersText.Split(new Char[] { ';' })) Parameters.Add(s);
                string SQL = Command.Remove(Command.IndexOf(" "));
                switch(SQL)
                {
                    case "INSERT":
                        DataBase.CommandText += ";SELECT last_insert_id()";
                        break;
                }
                for (int CurValue = 0; CurValue < Parameters.Count; CurValue++) DataBase.Parameters.AddWithValue("?" + CurValue, Parameters[CurValue]);
                DataBase.ExecuteNonQuery();
                switch (SQL)
                {
                    case "INSERT":
                        Argument.Add(DataBase.ExecuteScalar()); 
                        break;
                    case "SELECT":
                        MySqlDataReader DataReader = DataBase.ExecuteReader();
                        int Rows = 0; Argument.Add(0); Argument.Add(DataReader.FieldCount);
                        if (DataReader.HasRows) while (DataReader.Read()) { Rows++; for (int i = 0; i < DataReader.FieldCount; i++) Argument.Add(DataReader.GetString(i)); }
                        DataReader.Close(); Argument[0] = Rows;
                        break;
                }
                DataBase.Parameters.Clear();
                return Argument; // "0" = пусто
            }
            catch (Exception Error)
            {
                Console.WriteLine("Ошибка! " + Command + " /// " + Error);
                DataBase.Parameters.Clear();
                Argument.Add("-1");
                return Argument; // "-1" = ошибка
            }
        }


На выходе, если это INSERT, получаем id вставленной записи. Если же это SELECT, выводится Argument[0]=кол-во строк, Argument[1]=кол-во столбцов, Argument[*]=данные из таблицы. Все работает достаточно быстро. Может кому пригодится.
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38820373
AcTiViSioN911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ох, забыл кое-что изменить.

Это:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
                for (int CurValue = 0; CurValue < Parameters.Count; CurValue++) DataBase.Parameters.AddWithValue("?" + CurValue, Parameters[CurValue]);
                DataBase.ExecuteNonQuery();
                switch (SQL)
                {
                    case "INSERT":
                        Argument.Add(DataBase.ExecuteScalar()); 
                        break;
                    case "SELECT":
                        MySqlDataReader DataReader = DataBase.ExecuteReader();
                        int Rows = 0; Argument.Add(0); Argument.Add(DataReader.FieldCount);
                        if (DataReader.HasRows) while (DataReader.Read()) { Rows++; for (int i = 0; i < DataReader.FieldCount; i++) Argument.Add(DataReader.GetString(i)); }
                        DataReader.Close(); Argument[0] = Rows;
                        break;

Заменить на это:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
                for (int CurValue = 0; CurValue < Parameters.Count; CurValue++) DataBase.Parameters.AddWithValue("?" + CurValue, Parameters[CurValue]);
                switch (SQL)
                {
                    case "INSERT":
                        Argument.Add(DataBase.ExecuteScalar()); 
                        break;
                    case "SELECT":
                        DataBase.ExecuteNonQuery();
                        MySqlDataReader DataReader = DataBase.ExecuteReader();
                        int Rows = 0; Argument.Add(0); Argument.Add(DataReader.FieldCount);
                        if (DataReader.HasRows) while (DataReader.Read()) { Rows++; for (int i = 0; i < DataReader.FieldCount; i++) Argument.Add(DataReader.GetString(i)); }
                        DataReader.Close(); Argument[0] = Rows;
                        break;
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38820533
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AcTiViSioN911
Новый пользователь будет иметь все те-же таблицы что и плотно играющий 10 лет игрок. Разве что заполнены строки будут не числами а нулями/пустотой (как там позволяет БД). Игровые возможности уже практически расписаны, вскоре можно будет создавать, собственно, таблицы. Сейчас у меня готово то - регистрация\авторизация и некоторые стандартные таблицы.
Если исходить из расчета, что у каждого игрока не будет своей таблицы, то тут даже проще - не было у человека автомобиля - и строки в таблице "Автомобили" нет. А как появился - так сразу новая запись.

ты там писал, что что то понимаешь.
так вот, это вряд ли.

тебе надо в школу за парту, и учиться, учиться, учиться, как говорил великий Ленин...
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38820606
JeStone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если бы мне нужна была высокая масштабируемость и я бы не хотел тратить на СУБД деньги, то я бы выбрал либо PostgreSQL, либо MongoDB.
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38820610
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JeStoneЕсли бы мне нужна была высокая масштабируемость и я бы не хотел тратить на СУБД деньги, то я бы выбрал либо PostgreSQL, либо MongoDB.А почему не Riak?

uGameDB uGameDB OverviewuGameDB is a complete database solution for the Unity game engine especially tailored for networked games. It consists of the uGameDB client which is tightly integrated with Unity for unmatched ease of use, and the Riak back-end database which adds an entirely new level of scalability.
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38820613
JeStone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAА почему не Riak?

Наверное дело в том, что с упомянутыми СУБД у меня есть опыт работы, а с Riak нет =) Но если вы напишите его преимущества по сравнению с MongoDB, я буду признателен )
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38820623
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JeStone,

uGameDB не умеет работать с Mongo :)
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38820625
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
СУБД для браузерной MMOG (C#)
    #38836468
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AcTiViSioN911Dimitry Sibiryakov,

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

Я работаю в интернет магазине, входящем в ТОP-10 в России, и у нас только MS SQL. Так что могу дать положительный отзыв. При правильном программировании справляется с огромными нагрузками.

Для MMO будет полезен Service Broker
...
Рейтинг: 0 / 0
87 сообщений из 87, показаны все 4 страниц
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / СУБД для браузерной MMOG (C#)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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