Реклама на сайте Advertise with us

MySQL - частая запись в базу, что выбрать?

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:

📈sflash.biz

С нами с 03.11.12
Сообщения: 3913
Рейтинг: 4447


Передовик Master-X (16.04.2018) Передовик Master-X (16.07.2018) Передовик Master-X (16.12.2022) Передовик Master-X (01.01.2023)
Ссылка на сообщениеДобавлено: 06/10/16 в 14:12       Ответить с цитатойцитата 

Если надо в MySQL InnoDB вносить частые непериодичные данные типа просмотров страниц\счётчики etc стремящиеся по чатстоте в пике до нескольких правок в секунду типа инкремента или перезаписи, что лучше выбрать в практичном смысле:
1. Не париться и тупо по Первичному ключу писать\инкрементить в строку таблицы данные.
2. Кешировать в Redis и с периодичностью раз в 2-5 минут делать множественный апдейт нескольких сотен или тысяч строк?

Может уже есть какя-то другая проверенная практика?

0
 



С нами с 09.08.12
Сообщения: 185
Рейтинг: 378

Ссылка на сообщениеДобавлено: 06/10/16 в 16:46       Ответить с цитатойцитата 

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

(видел где то статью - там в монгу сливали данные из редиса по такому же принципу - монга тупила при частых записях)

но прежде имеет смысл попробовать
http://devacademy.ru/posts/kak-dobavliat-nosql-zaprosy-v-mysql-inti…ubuntu-14/
https://dev.mysql.com/doc/refman/5.6/en/innodb-memcached-setup.html

еще конечно можно вообще взять тарантул и использовать без mysql - но это уже приложение придется переписывать полностью.

9
 

www.phpdevs.com

С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105


Передовик Master-X (01.09.2005) Передовик Master-X (16.09.2005) Передовик Master-X (01.10.2005) Передовик Master-X (16.08.2006) Передовик Master-X (16.10.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 06/10/16 в 20:14       Ответить с цитатойцитата 

Mysql имеет Memory тип таблиц, где данные в памяти хранятся. Можно ее использовать как временную и синхронизировать уже в нормальную таблицу.

На у вообще несколько правок в секунду - не так уж и много. Я бы не парился по началу, тем более если обновление по первичному ключу, а поле счетчика не является индексом.

Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.

8
 



С нами с 14.11.05
Сообщения: 56
Рейтинг: 177

Ссылка на сообщениеДобавлено: 06/10/16 в 20:57       Ответить с цитатойцитата 

Stek писал:
Mysql имеет Memory тип таблиц, где данные в памяти хранятся. Можно ее использовать как временную и синхронизировать уже в нормальную таблицу.

А также MEMORY имеет table lock, который может случиться, когда он совсем не нужен.

Золотое правило из двух пунктов:
1) Быстро, а главное последовательно, писать лог куда-нибудь (локальный файл, MySQL-InnoDB/MyRocks, Redis-list, etc.).
2) Читать пачками записанное, суммировать в памяти, обновлять значения конечных счетчиков "одним" запросом.
В итоге, запись будет всегда за константное/короткое время.

9
 

Криптопохуист

С нами с 05.04.03
Сообщения: 17158
Рейтинг: 6019

Ссылка на сообщениеДобавлено: 06/10/16 в 21:56       Ответить с цитатойцитата 

Ну да, так и делают. Это все надо писать в рав таблицу без индексов. А может и отдельную базу данных, а может и на отдельном сервере. Ну и периодически ее обрабатывать, стирая рав данные после.

Я давно отошел от дел, хз что сейчас лучше, чем старушка MyISAM для этого. Только не InnoDB!!! Инна мало того что глючила, так еще и ошибку типа "table busy, try later" выдавала smail101.gif Ох бля, и смех и грех smail101.gif

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

Более 10 млн в сутки лог записей принимал так.

А, еще можно короче конкурентные запросы превратить в 1 тред. Я называл это "выпрямитель" icon_wink.gif В общем, вешаешь промежуточный mysql серв, он принимает туеву хучу конкурентных запросов INSERT/UPDATE от логов. Теперь берешь, настраиваешь репликацию на свой главный серв и этот проксик на главный серв начинает слать все эти запросы последовательно одним тредом репликации. Иногда прямо спасало, т.к. на главном сервере можно без проблем локнуть таблицу и че нить с ней сделать без риска домино.

Последний раз редактировалось: Pentarh (06/10/16 в 22:01), всего редактировалось 1 раз

9
 

💀💀💀

С нами с 31.05.10
Сообщения: 4689
Рейтинг: 728

Ссылка на сообщениеДобавлено: 06/10/16 в 21:59       Ответить с цитатойцитата 

https://clickhouse.yandex/
собирай суда стату, а потом обсчитывай и рассовывай куда нада.

8
 



С нами с 14.11.05
Сообщения: 56
Рейтинг: 177

Ссылка на сообщениеДобавлено: 07/10/16 в 08:27       Ответить с цитатойцитата 


ClickHouse рекомендует писать в него пачками от 1000 записей, не более чем 100 запросов в секунду. Так что какой-то буфер перед ним все равно потребуется.

9
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »