myDC.ru

Здравствуйте, гость ( Вход | Регистрация )

 
2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему

> Эффективность mysql, текстовый файл или mysql?

Теги
Нет тегов для показа
Iskandark
сообщение 13.12.2011, 23:45
Сообщение #1


Активный участник
***

Группа: Пользователи
Сообщений: 61
Регистрация: 24.10.2008
Из: Moscow
Пользователь №: 875
Спасибо сказали: 0 раз




Всем привет!
Ещё очень давно интересует один вопрос. Насколько эффективно использовать mysql по сравнению со стандартной реализацией таблиц (в большинстве скриптах lua) в обычном текстовом файле?

Есть ли проигрышь в скорости доступа к информации и загрузке процессора, используя mysql?
Возможно преимущества от использования mysql в скриптах появляются, когда большая БД (сотни МБ или ГБ, когда вся БД в оперативку не помещается) и много записей?
Go to the top of the page
+Quote Post
Saymon21
сообщение 14.12.2011, 0:25
Сообщение #2


Site Reliability Engineer
*********

Группа: Модераторы
Сообщений: 1 772
Регистрация: 27.6.2009
Из: Чувашия, г. Чебоксары
Пользователь №: 3 719
Спасибо сказали: 479 раз




1) Есть.
2) Если правильно писать запросы, мб чуть поработать над оптимизацией самого сервера - да.
Go to the top of the page
+Quote Post
Alexey
сообщение 14.12.2011, 0:58
Сообщение #3


7 квадратиков
*******

Группа: Модераторы
Сообщений: 793
Регистрация: 21.1.2009
Пользователь №: 1 895
Спасибо сказали: 301 раз




Хороший вопрос поднят. Предлагаю включить в сравнение ещё и SQLite.
С удовольствием почитал-бы развёрнутый ответ.
Go to the top of the page
+Quote Post
mariner
сообщение 14.12.2011, 8:37
Сообщение #4


Местная ТехПоддержка
**********

Группа: Администраторы
Сообщений: 1 875
Регистрация: 18.7.2008
Из: Моск. Обл, г. королев, район Болшево
Пользователь №: 221
Спасибо сказали: 220 раз




Цитата
Насколько эффективно использовать mysql по сравнению со стандартной реализацией таблиц (в большинстве скриптах lua) в обычном текстовом файле?

Ну это же очевидно.
1. нету парсинга со стороны хаба - быстрее запуск скрипта
2. унифицированный формат. С базой скрипта удобно работать скриптом, если ндо еще откуда-то то начинается гемор. А SQL-хранилища хороши тем, что протокол унифицирован
3.Поиск в sql обычно идет по индексу( а там тебе и деревья и прочее) + таблица хэшируется для ускорения поиска. Кроме того в sql есть удобные средства, чтобы избегать дублей и прочих ненужных вещей.

Цитата
Есть ли проигрышь в скорости доступа к информации и загрузке процессора, используя mysql?
Возможно преимущества от использования mysql в скриптах появляются, когда большая БД (сотни МБ или ГБ, когда вся БД в оперативку не помещается) и много записей?

1. sql сервер конечно много будет есть при огромных базах, но ничто не мешает его ограничить, в птоке таких настроек естественно нет. При этом из-за хэширования и прочих плюшек (индексы и кэши) он будет быстр при поиске.
2. выйгрыша в скорости может и не быть, но тут все зависит от операций. если вы ищите в таблице, то поиск на sql-хранилище может быть шустрее, чем в таблице, а вот если изменяете - то тут уже надо думать. В данном случае на первый план выходит вопрос проектирования базы и запросов к ней.

Примеры:
1. нам надо будет искать в базе и чтобы не было дублей. Мы делаем базу с уникальным ключом и индексом. При этом у нас будет относительно долгое добавление, но быстрый поиск. Тогда, чтобы избежать тормозов с добавлением надо проектировать запросы к базе так, чтобы он добавлял за раз сразу несколько значений. Тогда мы будем эффективней перестраивать индекс.
2. У нас есть, допустим, база регистрированных юзеров и база рекордов скриптов. Юзер, допустим, решил удалить себя. Логично, что нам надо очистить рекорды! В mysql это можно произвести просто указав внешний ключ из таблицы рекордов на таблицу юзеров, а в таблицах прийдется пройтись везде "ручками"
Go to the top of the page
+Quote Post
Ksan
сообщение 14.12.2011, 14:24
Сообщение #5


Белый Волк
*********

Группа: Пользователи
Сообщений: 1 723
Регистрация: 11.9.2008
Из: г.Томск
Пользователь №: 516
Спасибо сказали: 657 раз




Как-то раньше Сетапер высказывался (вроде), что мускульная база выгоднее при записях больше 10 тысяч (могу ошибиться в порядке числа).
Надо его подключить к этой теме.
Go to the top of the page
+Quote Post
Iskandark
сообщение 14.12.2011, 23:24
Сообщение #6


Активный участник
***

Группа: Пользователи
Сообщений: 61
Регистрация: 24.10.2008
Из: Moscow
Пользователь №: 875
Спасибо сказали: 0 раз




Как понял из сообщения mariner, что использование mysql оправдано при наличие нескольких приложений, которые работают с этой базой (например веб-сервер или другие хабы коннектятся к одной общей базе).

Приведу пример (вымышленный, только для примера объема записей и размера базы). Есть хаб с пиком юзеров 10000. Требуется вести лог по следующей информации:
1) ники всех посетителей,
2) 25 последних неодинаковых IP каждого пользователя (считаем, что все 25 полей каждого пользователя заняты),
3) дата последнего прихода или ухода.

За год работы хаба у нас накопилось 25000 записей с никами, IP и датами посещения пользователей. Итого у нас 25000*(25+1)=650k полей. Предположительно, такая база будет весить в текстовом формате 15-30Мб.
Насколько эффективно использовать в этом случае mysql или базу в текстовом файле? Как сказал mariner, что ограничить потребляемые ресурсы на обработку запросов в lua нельзя.... Как понимаю, остается только один параметр, который стоит рассматривать - это помещается ли вся база в ОЗУ компьютера? Но 15-30Мб не так уж и много для того, чтобы держать всю эту память в ОЗУ. Спасибо за уже высказанные мысли, и которые ещё будут высказаны, надеюсь.
Go to the top of the page
+Quote Post
mariner
сообщение 14.12.2011, 23:28
Сообщение #7


Местная ТехПоддержка
**********

Группа: Администраторы
Сообщений: 1 875
Регистрация: 18.7.2008
Из: Моск. Обл, г. королев, район Болшево
Пользователь №: 221
Спасибо сказали: 220 раз




Цитата
Но 15-30Мб не так уж и много для того, чтобы держать всю эту память в ОЗУ.

А как ты по этой базе ищешь то? Mysql будет искать эффективными алгоритмами, а вот используешь ли их ты в своем скрипте?
Go to the top of the page
+Quote Post
Iskandark
сообщение 15.12.2011, 0:24
Сообщение #8


Активный участник
***

Группа: Пользователи
Сообщений: 61
Регистрация: 24.10.2008
Из: Moscow
Пользователь №: 875
Спасибо сказали: 0 раз




Цитата(mariner @ 15.12.2011, 0:28) *
А как ты по этой базе ищешь то? Mysql будет искать эффективными алгоритмами, а вот используешь ли их ты в своем скрипте?


Например необходимо реализовать следующий функционал:

(1) просмотр по нику последние IP - это просто ищется, так как ник типа первичного ключа записи в нашей текстовой базе;
(2) найти все ники, которые принадлежали диапозону IP, например диапозону 123.45.0.0-123.45.255.255

Если требуется часто вызывать функцию (2), то необходимо сделать вторую базу, которая будет обновляться по данным из первой базы каждые 2 часа, например. Вторая база будет иметь группировку уже по диапозонам IP, вот пример записи такой второй допольнительной и обновляемой каждые 2 часа базы:

[123.34.] = {
[123.34.45.67]={nick1,nick2,nick3,},
[123.34.45.68]={nick3,nick4,nick5,},
[123.34.45.69]={nick6,nick2,nick5,},
...
},
[123.35.] = {
[123.35.45.67]={nick11,nick12,nick13,},
[123.35.45.68]={nick13,nick14,nick15,},
[123.35.45.69]={nick16,nick12,nick15,},
...
},
...
...

Вот использовать такую вторую дополнительную базу, которая обновляется регулярно по данным первой основной базы, более эффективно для реализации функции (2).

Такой подход будет считаться эффективным для выполнения этих двух функций или всё-таки использование mysql более предпочтительно будет? Я, понимаю, что возможно нельзя точно завить, что использование одного метода более эффективно, но возможно у кого-то есть соображения по этому поводу или опыт.
Go to the top of the page
+Quote Post
Enyby
сообщение 15.12.2011, 9:07
Сообщение #9


Освоившийся участник
*****

Группа: Пользователи
Сообщений: 391
Регистрация: 4.11.2009
Из: Дом
Пользователь №: 4 923
Спасибо сказали: 239 раз




Мускуль писали профессионалы.Причем на Си. Весьма сомнительно что вам удастся перепрыгнуть его по быстродействию, написав аналог на lua.
Это общее замечание.
На деле есть порог вхождения. База с 3 записями не эффективна. Лучше текстовый файл. Но уже на тысячу записей эффект будет очевидным.
Правда тут надо еще и задизайнить базу нормально. При плохом дизайне будет проигрышь в скорости.
Мускуль тоже будет всю базу в памяти держать, если ее объем 15-30 мб, только он еще будет строить индексы на основе бинарных деревье и прочие вкусности, причем от вас не требуется ничего сложного для реализации, в отличие от написания своего варианта DBMS на lua.
Go to the top of the page
+Quote Post
Setuper
сообщение 15.12.2011, 11:47
Сообщение #10


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




А с чего вы взяли, что базы данных держать всё в ОЗУ? По всей видимости это какой-то частный случай, когда бд держит всё в памяти, а вообще бд подкачивает нужные данные по необходимости, в противном случае на базы данных в несколько Тб никакой оперативы не напасёшься.

По поводу работы с бд, то тут можно смотреть с разных сторон.
Конечно, если ты профессионал, то ты обязательно используешь бд. БД обеспечивает лучшую сохранность данных, чем файлы.
Однако существуют пользователи, которые по той или иной причине не хотят устанавливать какие-то бд, тогда на помощь может приходит sqlite big_smile.gif

Тем не менее, самый приемлемый вариант - это 2 машины: на одной хаб, на другой бд.

Что касается оптимальности, то тут основную роль конечно же играет проектирование бд. Хорошо спроектированная бд и быстро работает, и масштабируема для проекта в целом. Параллельно с проектированием бд нужно продумывать эффективные алгоритмы взаимодействия с этой бд.
Как привило, обычно возникает палка с двумя концами: быстрой поиск или быстрая вставка.
Go to the top of the page
+Quote Post
Enyby
сообщение 15.12.2011, 11:51
Сообщение #11


Освоившийся участник
*****

Группа: Пользователи
Сообщений: 391
Регистрация: 4.11.2009
Из: Дом
Пользователь №: 4 923
Спасибо сказали: 239 раз




Если объем базы составляет 15-30 мб и кэш по дефолту порядка 200 мб, то все таблицы находятся в кеше и ни разу не вытесняются на диск. Именно поэтому можно говорить, что БД в памяти. Хотя это происходит не сразу. С момента старта проходит некоторое время до полного кеширования базы.

Насчет сохранности - это очень важный момент. Если что-то случится, например, закончится место на диске, то все файлы пойдут лесом, в то время как БД, особенно транзакционные останутся в нормальном состоянии, просто произойдет утеря последних данных.
Go to the top of the page
+Quote Post
mariner
сообщение 15.12.2011, 12:17
Сообщение #12


Местная ТехПоддержка
**********

Группа: Администраторы
Сообщений: 1 875
Регистрация: 18.7.2008
Из: Моск. Обл, г. королев, район Болшево
Пользователь №: 221
Спасибо сказали: 220 раз




Цитата
Именно поэтому можно говорить, что БД в памяти

А вот это сильно зависит от конфига.
Go to the top of the page
+Quote Post
dimajak
сообщение 15.12.2011, 22:20
Сообщение #13


Продвинутый участник
****

Группа: Пользователи
Сообщений: 157
Регистрация: 19.1.2010
Из: Волгоград
Пользователь №: 5 756
Спасибо сказали: 77 раз




Здесь палка о двух концах, объясню почему.
Кто-нибудь, когда-нибудь задумывался о том, что происходит с SQL-запросом после передачи MySQL-серверу?
Вы задумывались, что после передачи строки запроса нужно совершить множество операций перед тем как выдать вам результат?
1) Лексический анализ;
2) Парсинг;
3) Обращение к схеме (узнать индексы, поля);
4) Работа с кэшем запросов;
5) Оптимизатор;
6) Анализ связанных индексов;
7) Выборка стратегии запроса;
8) Открытие и блокировка таблиц;
9) Запрос к движку;
10) Обслуживание;
11) Форматирование данных;
12) Закрытие и разблокировка таблиц.
Если еще сюда добавить на время на установление соединения с MySQL-сервером, то время на обработку вашего запроса еще увеличится. Умножьте на количество запросов в единицу времени. Можно, конечно, съэкономить на однотипных запросах, но не намного при большом количестве разнородных запросов.

Теперь стало понятнее?

Хаб не заморачиваясь и не напрягаясь передал строку запроса MySQL-серверу, не занял много памяти и не занял много процессорного времени. Но при этом мы видим резкий скачок в потреблении памяти и ресурсах процессора.

Если хотите, то почитайте о NoSQL решениях, даже с использованием MySQL, производительность выше в 3-5 раз.
Go to the top of the page
+Quote Post
Enyby
сообщение 15.12.2011, 22:25
Сообщение #14


Освоившийся участник
*****

Группа: Пользователи
Сообщений: 391
Регистрация: 4.11.2009
Из: Дом
Пользователь №: 4 923
Спасибо сказали: 239 раз




Без конкретики это пустой разговор. Иной раз лучше весь этот разбор + поиск по индексу чем тупой перебор пары миллионов записей из файла. А когда объем базы превышает обем доступной памяти то без SQL становится туго.
Go to the top of the page
+Quote Post
mariner
сообщение 16.12.2011, 6:53
Сообщение #15


Местная ТехПоддержка
**********

Группа: Администраторы
Сообщений: 1 875
Регистрация: 18.7.2008
Из: Моск. Обл, г. королев, район Болшево
Пользователь №: 221
Спасибо сказали: 220 раз




Цитата
Вы задумывались, что после передачи строки запроса нужно совершить множество операций перед тем как выдать вам результат?

А то, но dimajak, у тебя пара пунктов лишние и пары не хватает.
Go to the top of the page
+Quote Post
dimajak
сообщение 22.12.2011, 4:47
Сообщение #16


Продвинутый участник
****

Группа: Пользователи
Сообщений: 157
Регистрация: 19.1.2010
Из: Волгоград
Пользователь №: 5 756
Спасибо сказали: 77 раз




Цитата(mariner @ 16.12.2011, 7:53) *
у тебя пара пунктов лишние
какие?
Цитата(mariner @ 16.12.2011, 7:53) *
и пары не хватает.
буду рад услышать!
Go to the top of the page
+Quote Post
mariner
сообщение 22.12.2011, 10:34
Сообщение #17


Местная ТехПоддержка
**********

Группа: Администраторы
Сообщений: 1 875
Регистрация: 18.7.2008
Из: Моск. Обл, г. королев, район Болшево
Пользователь №: 221
Спасибо сказали: 220 раз




Открытие и блокировка таблиц и соответсвенно закрытие и разблокировка. Это происходит отнюдь не всегда. При чтении такого нет.

А не хватает у вас - проверка прав доступа в ACL
Go to the top of the page
+Quote Post
dimajak
сообщение 27.12.2011, 1:26
Сообщение #18


Продвинутый участник
****

Группа: Пользователи
Сообщений: 157
Регистрация: 19.1.2010
Из: Волгоград
Пользователь №: 5 756
Спасибо сказали: 77 раз




Enyby, т.е. теперь мы готовы разобрать конкретные случаи? Ну что ж, давайте. Приведите примеры, желательно применительно к PtokaX, чтобы не было пустым разговором (заодно перечитайте свое сообщение).
mariner, а всегда это надо?
Я так понимаю, что из приведенных, навскидку, 12 операций, (я многие мог и забыть, т.к. я не специалист в SQL-серверах) знакомыми вам оказались лишь пара? shocked.gif

Еще раз повторюсь, если было не понятно - каждая БД требует своего внятного применения, скорость доступа к данным в этой БД зависит от скорости доступа к результатам итоговых данных.
Go to the top of the page
+Quote Post
Enyby
сообщение 27.12.2011, 3:02
Сообщение #19


Освоившийся участник
*****

Группа: Пользователи
Сообщений: 391
Регистрация: 4.11.2009
Из: Дом
Пользователь №: 4 923
Спасибо сказали: 239 раз




Конкретики в том смысле, что конкретный объем пользователей, конкретный набор железа и т. п. Если у вас 100 юзеров, это один разговор, а когда их 20 к - совершенно другой.
Серебряной пули нет. Это я имел в виду. В каком-то конкретном случае будут лучше файлы, а в каком-то - реляционная СУБД.
Go to the top of the page
+Quote Post
mariner
сообщение 27.12.2011, 8:59
Сообщение #20


Местная ТехПоддержка
**********

Группа: Администраторы
Сообщений: 1 875
Регистрация: 18.7.2008
Из: Моск. Обл, г. королев, район Болшево
Пользователь №: 221
Спасибо сказали: 220 раз




Цитата
12 операций
я не специалист в SQL-серверах


Тогда может помолчишь? По поводу 12 операций - ты очень близко все описал, ага. Но кое-что важное забыл. То, что ВСЕГДА надо.

У нас вообще в институте есть такая штука как курс баз данных, который обновляется ежегодно. Соответственно курс несет в себе текущую информацию на счет БД. Суть в том, что я его как раз в этом семестре слушал и даже немного, в результате, в теме. А еще этот курс доступен всем, могу дать ссылку - прочтешь.
Go to the top of the page
+Quote Post

2 страниц V   1 2 >
Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

Collapse

> Похожие темы

  Тема Ответов Автор Просмотров Последнее сообщение
No new Topic has attachmentsMysql
win32 - API 2 | Самая распространённая база данных
78 Setuper 113 729 19.8.2017, 8:59 Посл. сообщение: Kinsler
No New Posts lua mysql
4 shadow3c 9 486 20.8.2014, 20:33 Посл. сообщение: shadow3c
No New Posts Topic has attachmentsmysql
RusHub | Библиотека базы данных mysql
8 Setuper 22 024 18.8.2014, 4:05 Посл. сообщение: shadow3c
No New Posts Mysql
Unix | База данных
11 Jaska 22 432 21.9.2013, 18:17 Посл. сообщение: KCAHDEP
No New Posts Скрипт антимат и антиреклама с базой в Mysql
1 Vizunchik 7 285 7.12.2011, 20:17 Посл. сообщение: Ksan
No New Posts RusHub and MySQL?! есть ли и как ...
вопросы про mysql, md5 hash и т.д.
4 DRUG_ADDICT 10 179 3.4.2011, 7:03 Посл. сообщение: alex82
No New Posts Topic has attachmentsCustomLocations + MySQL
Определяем провайдера по IP-адресу
0 alex82 7 175 7.3.2011, 18:39 Посл. сообщение: alex82
No New Posts Релизы/Заказы с MySQL
API 2 | MySQL
0 Kingston 5 505 6.2.2011, 10:08 Посл. сообщение: Kingston
No New Posts Topic has attachmentsУстановка и настройка Ubuntu 10.04 под PtokaX 4.1.2 с MySQL. Финал.
Инструкция для новичков в Линуксе
11 TiGRpp 29 596 2.9.2010, 5:09 Посл. сообщение: TiGRpp
No new Topic has attachmentsПоиск по TTH на MySQL
18 Lesh™ 21 811 15.8.2010, 12:40 Посл. сообщение: Lesh™
No New Posts От: Поиск по TTH на MySQL
От темы с ID: 3549
1 Lesh™ 6 741 14.7.2010, 0:30 Посл. сообщение: Lesh™
Closed Скрипт для внесени в данных в MySQL прям из чата командой.
Нужно маленький скриптик который будет экспортировать определенный тек
1 DEN 007 6 422 4.7.2010, 9:45 Посл. сообщение: Setuper
No New Posts От: Заявки на перевод скриптов под MySQL
От темы с ID: 1824
0 alev 5 431 25.4.2010, 12:05 Посл. сообщение: alev
No New Posts От: mysql
От темы с ID: 2952
3 derSpinner 6 698 13.4.2010, 11:41 Посл. сообщение: Setuper
No New Posts ВАЖНО: Topic has attachmentsЗаявки на перевод скриптов под MySQL
5 Wariner 13 910 4.4.2010, 15:18 Посл. сообщение: Accelerator

 



RSS Сейчас: 23.12.2024, 7:26