Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите БД и работа с ней.

Rider3217

Активный участник
Пользователь
Баллы
98
Имя в Minecraft
Planet0111
Есть у кого то сылочка на подробнейший туториал по MySql и Sql?
В Google почти не искал, есть туториал по MySQl, но там не всё описано.
 
А чем БД лучше того же yml файла например? Она быстрее? Нагрузки меньше?
Ну например она будет доступна не только с локального веб-сервера. На счёт нагрузки это уже как ты организуешь sql запросы. В плагинах обычно достаточно 4-типов sql. Это SELECT,INSERT,UPDATE,DELETE
 
Ну например она будет доступна не только с локального веб-сервера. На счёт нагрузки это уже как ты организуешь sql запросы. В плагинах обычно достаточно 4-типов sql. Это SELECT,INSERT,UPDATE,DELETE
А примерка какое время на получение одного запроса?
 
А чем БД лучше того же yml файла например? Она быстрее? Нагрузки меньше?
Это все от твоей хитрости зависит. Ведь данные из MySQL тоже в файле хранятся. Вопрос в том, насколько эффективные способы используются для получения и добавления данных. Можно накатать свой класс для файловой БД, который будет эффективен.

MySQL в основном нужен для связки с сайтом. Хотя и там можно извратится, написать скрипт для чтения файла (еще апач надо будет настроить, по дефолту настройки безопасности не дадут залезть в файловую систему). Но это все будут баганные костыли, поэтому лучше MySQL.
 
Если у автора темы миллион записей, то чтение одного случайного из текстового файла будет сопровождаться чтением всего файла, парсингом, всякими другими накладными расходами, тогда как в БД запрос на чтение чаще всего использует индексы и занимает минимальное время.
Чем больше размер данных, тем больше выгода от использования СУБД.
 
Если у автора темы миллион записей, то чтение одного случайного из текстового файла будет сопровождаться чтением всего файла, парсингом, всякими другими накладными расходами, тогда как в БД запрос на чтение чаще всего использует индексы и занимает минимальное время.
Чем больше размер данных, тем больше выгода от использования СУБД.
Очень хорошый ответ.
 
Если у автора темы миллион записей, то чтение одного случайного из текстового файла будет сопровождаться чтением всего файла, парсингом, всякими другими накладными расходами, тогда как в БД запрос на чтение чаще всего использует индексы и занимает минимальное время.
Чем больше размер данных, тем больше выгода от использования СУБД.
Смотря как реализовать. Что мешает 1 раз считать в массив и шарить из него, например разбросав на N частей, каждая из которых обрабатывается отдельным потоком? А в файл записывать изменения по таймеру.
 
Смотря как реализовать. Что мешает 1 раз считать в массив и шарить из него, например разбросав на N частей, каждая из которых обрабатывается отдельным потоком? А в файл записывать изменения по таймеру.
Если текстовый файл, то дозаписывать можно только добавления в конец. Иначе это полная перезапись. Более сложный вариант — обрезка конца и дозапись в конец.
Считать 1 раз в память — не хороший путь, зачем держать в памяти огромное кол-во чего-то, что, скорее всего, не понадобится в течении работы сервера. Как понять — разбросать на N частей? Писать своё индексирование (на основе HashMap или других примитовов)?

Всегда стоит вопрос, что выгоднее (по времени реализации и результату работы). Нужно рассматривать конкретную задачу.
 
Считать 1 раз в память — не хороший путь, зачем держать в памяти огромное кол-во чего-то, что, скорее всего, не понадобится в течении работы сервера.
Ну я вот MaxAuth пишу, там как раз это надо. Игроки постоянно входя-выходят, а файл медленнее читать чем по массиву циклом с двух концов.
Как понять — разбросать на N частей?
Ну вот у тебя например 20 записей, создаем 4 потока, каждый из которых обрабатывает по 5 строк. Соответственно, когда нужное найдено, остальные потоки тут же отваливаются. Насчет эффективности не знаю, надо подбирать соотношение под конкретное железо. Если на сервере проц с кучей ядер, самое то будет.
Писать своё индексирование (на основе HashMap или других примитовов)?
HashMap не интересовался пока что. Насколько будет эффективнее, чем например equals из String пройтись в цикле, ощутимо или только на пару наносекунд? Не доверяю я этому стандартному API. Всегда лучше свое делать чем гадать. Для себя сделал простой класс, где помимо всех данных лежит хэш в int, и в цикле поиск именно по хэшу, с начала и с конца.
Код:
int n = base.size()-1;
for (int i = 0; i < (n/2+2); i++) {
   if (base.get(i)...);
   if (base.get(n)...);
   if (n > 0) n--;
}
Правда в моем случае приходится по таймеру именно всю базу в файл писать, там неизвестно какая строка могла поменятся. Правда для миллиона строк уже будет не так эффективно.
 
Игроки постоянно входя-выходят, а файл медленнее читать чем по массиву циклом с двух концов.
При условии, что весь файл влазит в оперативку. Бывают и другие случаи.
Ну вот у тебя например 20 записей, создаем 4 потока, каждый из которых обрабатывает по 5 строк. Соответственно, когда нужное найдено, остальные потоки тут же отваливаются. Насчет эффективности не знаю, надо подбирать соотношение под конкретное железо. Если на сервере проц с кучей ядер, самое то будет.
Если твой проц с кучей свободных ядер. Если они заняты, то обработка 5 строк занимает в разы меньше времени, чем создание нового потока и ожидание, пока ему выделится квант времени. Поток имеет смысл создавать только для значительного объёма работы.
HashMap не интересовался пока что. Насколько будет эффективнее, чем например equals из String пройтись в цикле, ощутимо или только на пару наносекунд?
HashMap всегда эффективнее (ну кроме разве что когда элементов меньше десятка) прямого перебора. Потому что перебор всегда занимает время O(N), а HashMap с его корзинами — чаще всего около O(log(N)).
Не доверяю я этому стандартному API. Всегда лучше свое делать чем гадать.
Гадать — плохо. Не доверять стандартному — плохо. Нужно хорошо знать тот инструмент, которым ты пользуешься.
Для себя сделал простой класс, где помимо всех данных лежит хэш в int, и в цикле поиск именно по хэшу, с начала и с конца.
Написал костыль, который уже есть в лучшем виде в рантайме: HashMap.

Полезная инфа в общем-то для всех по этой теме:
 
Написал костыль, который уже есть в лучшем виде в рантайме: HashMap.
Именно для БД много шаманства потребуется, там же и по нику искать, и по юиду, и по ip, в том числе подсети.
Спасибо. Ты меня убедил в эффективности HashMap :D
А про потроха MySQL не знаешь где почитать? Очень интересно как там высокая скорость реализована.
 
Я вижу вы любите дискуссии, без них ни куда))
 
СУБД вообще правильней, но нужно понять ее философию, что я пока что никак не могу сделать(((
 
и в цикле поиск именно по хэшу, с начала и с конца
а в чем сокральный смысл поиска с концов в центр, а не от одного конца до другого?))
а насчет бд, там куча каких-то деревьев и индексов, короче все сложно)
 

Поделиться этой страницей

Назад
Верх