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

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

Ну так это самая простая операция, происходящая всего 1 раз для каждого клиента. Меня сейчас интересует лишь одно - как правильно написать сервер, чтобы не было ничего "кривого" или лишнего.
25 ноя 14, 18:15    [16903967]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
Вася Уткин
Guest
AcTiViSioN911
Вася Уткин,

Взял за образец. Команда выполнилась 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();
            }
        }

И что мне это дало?

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

1. Весь тот код, что до .Prepare(); делайте один раз в конструкторе - это выполняется долго.
2. А следующие строчки выполняются быстро:
command.Parameters[0].Value = 21;
command.Parameters[1].Value = "Second Region";
command.ExecuteNonQuery();
делайте их каждый раз, когда надо обратиться к базе - фактически это no-SQL обращение к базе.
25 ноя 14, 18:19    [16903987]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
Dimitry Sibiryakov
Member

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

AcTiViSioN911
Меня сейчас интересует лишь одно - как правильно написать сервер,
чтобы не было ничего "кривого" или лишнего.

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

Posted via ActualForum NNTP Server 1.5

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

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

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


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


А что должно быть в самом SqlCommandPrepareEx? Ведь я уже заранее пишу какими должны быть логин и пароль, зачем тогда параметры?
25 ноя 14, 18:47    [16904166]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
Вася Уткин
Guest
Таких
                string[] MassID = MySqlCommand("get", "SELECT id FROM users WHERE login = '" + Login + "'", "users", ""); // Получить последний записанный номер (ID в таблице)

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

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

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

Работает и так:
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();
            }
25 ноя 14, 18:55    [16904194]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
AcTiViSioN911
Member

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

Хм, ну хорошо. Попробую обойтись без этого, раз вы так говорите. Сам то я разницы не вижу)
25 ноя 14, 18:57    [16904202]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
Вася Уткин
Guest
AcTiViSioN911
Собственно, вот такие критерии:
1) Максимальная скорость чтения\записи, ...

AcTiViSioN911
Работает и так:

Ну понятно...
25 ноя 14, 18:57    [16904204]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
А, ну, да... Пришла пора курсовых...
25 ноя 14, 20:47    [16904693]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
AcTiViSioN911
Member

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

Ну так, пришло время учить матчасть) Потихоньку вникаю что-зачем.
25 ноя 14, 20:55    [16904729]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
AcTiViSioN911
Ну так, пришло время учить матчасть) Потихоньку вникаю что-зачем.


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

И, по теме, как правило, критерии 1 и 2 не совместимы.
25 ноя 14, 21:06    [16904786]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
AcTiViSioN911
Member

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

Так все мы стремимся к идеалу, пусть даже это и невозможно. Я получил достаточно информации чтобы продолжить работу.
25 ноя 14, 21:13    [16904817]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
AcTiViSioN911
Я получил достаточно информации чтобы продолжить работу.


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

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

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

Вот так годится? Я старался учесть все требования...
            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(); // Закрыть соединение
        }
25 ноя 14, 21:38    [16904933]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
AcTiViSioN911
Member

Откуда:
Сообщений: 35
Ой забыл, в конце:
Console.WriteLine(DateTime.Now.Millisecond - Time);

Выдает 110 мс, это нормальный результат? Или слишком медленно?
25 ноя 14, 21:39    [16904939]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
AcTiViSioN911
Вот так годится?


Я уже говорил про соответствующий раздел форума.
25 ноя 14, 21:44    [16904964]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
AcTiViSioN911
это нормальный результат? Или слишком медленно?


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

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

Эм, мне создавать отдельную тему ради одного вопроса? Этот топик уже исчерпал себя, и не думаю что на этом форуме "набивание постов" как-то наказывается. К тому же, ТС тут я.
25 ноя 14, 21:46    [16904977]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
AcTiViSioN911
Эм, мне создавать отдельную тему ради одного вопроса?


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

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


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

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


Мои соболезнования.
25 ноя 14, 21:48    [16904996]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
Вася Уткин
Guest
AcTiViSioN911
pkarklin,

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

Вот так годится? Я старался учесть все требования...
            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-запросы - это выше их понимания :)
25 ноя 14, 23:50    [16905449]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
AcTiViSioN911
Member

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

Вы предлагаете мне открыть соединения для 1000+ таблиц, а потом не закрывая их писать, читать и т.д.?
26 ноя 14, 00:34    [16905505]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
AcTiViSioN911
Member

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

Или можно менять и другие значения, например:
"INSERT INTO users (Login,Password) VALUES (?0,?1)"
сделать так:
"INSERT INTO ?0 (?1, .... ) VALUES (?10, .... )"
Так можно?
26 ноя 14, 00:37    [16905512]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
AcTiViSioN911
Member

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

Таких примеров я конечно не видел, но мало ли...
26 ноя 14, 00:39    [16905516]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
wamaco
Member [заблокирован]

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

SQLite вам будет достаточно.
26 ноя 14, 01:03    [16905542]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для браузерной MMOG (C#)  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 11482
AcTiViSioN911
Вы предлагаете мне открыть соединения для 1000+ таблиц, а потом не закрывая их писать, читать и т.д.?
Вам предлагают спроектировать ваши SQL-запросы и подготавливать параметризованные на нужных соединениях в нужных количествах.

P.S. И, да - урежьте осетра про тысячи таблиц: если вы постоянно работаете вблизи верхних пределов, то, вероятно, в этом есть что-то неправильное.
26 ноя 14, 04:10    [16905658]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4   вперед  Ctrl      все
Все форумы / Сравнение СУБД Ответить