📈sflash.biz
С нами с 03.11.12
Сообщения: 3913
Рейтинг: 4447
|
Добавлено: 06/10/16 в 14:12 |
Если надо в MySQL InnoDB вносить частые непериодичные данные типа просмотров страниц\счётчики etc стремящиеся по чатстоте в пике до нескольких правок в секунду типа инкремента или перезаписи, что лучше выбрать в практичном смысле:
1. Не париться и тупо по Первичному ключу писать\инкрементить в строку таблицы данные.
2. Кешировать в Redis и с периодичностью раз в 2-5 минут делать множественный апдейт нескольких сотен или тысяч строк?
Может уже есть какя-то другая проверенная практика?
|
|
|
|
С нами с 09.08.12
Сообщения: 185
Рейтинг: 378
|
Добавлено: 06/10/16 в 16:46 |
|
|
|
|
www.phpdevs.com
С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105
|
Добавлено: 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) Читать пачками записанное, суммировать в памяти, обновлять значения конечных счетчиков "одним" запросом.
В итоге, запись будет всегда за константное/короткое время.
|
|
|
|
Криптопохуист
С нами с 05.04.03
Сообщения: 17158
Рейтинг: 6019
|
Добавлено: 06/10/16 в 21:56 |
Ну да, так и делают. Это все надо писать в рав таблицу без индексов. А может и отдельную базу данных, а может и на отдельном сервере. Ну и периодически ее обрабатывать, стирая рав данные после.
Я давно отошел от дел, хз что сейчас лучше, чем старушка MyISAM для этого. Только не InnoDB!!! Инна мало того что глючила, так еще и ошибку типа "table busy, try later" выдавала Ох бля, и смех и грех
В общем, базу данных, принимающую равовые запросы - ничто не должно отвлекать и затыкать. В том числе посторонние процессы на сервере, по этому она должна быть выделенной. Всегда случаются затыки, которые проходят сами по себе, быстро и не очень. Но если это случится на равовой базе - вновь приходящие запросы научат админа что такое эффект домино
Более 10 млн в сутки лог записей принимал так.
А, еще можно короче конкурентные запросы превратить в 1 тред. Я называл это "выпрямитель" В общем, вешаешь промежуточный mysql серв, он принимает туеву хучу конкурентных запросов INSERT/UPDATE от логов. Теперь берешь, настраиваешь репликацию на свой главный серв и этот проксик на главный серв начинает слать все эти запросы последовательно одним тредом репликации. Иногда прямо спасало, т.к. на главном сервере можно без проблем локнуть таблицу и че нить с ней сделать без риска домино.
Последний раз редактировалось: Pentarh (06/10/16 в 22:01), всего редактировалось 1 раз
|
|
|
|
💀💀💀
С нами с 31.05.10
Сообщения: 4689
Рейтинг: 728
|
Добавлено: 06/10/16 в 21:59 |
|
|
|
|
С нами с 14.11.05
Сообщения: 56
Рейтинг: 177
|
Добавлено: 07/10/16 в 08:27 |
ClickHouse рекомендует писать в него пачками от 1000 записей, не более чем 100 запросов в секунду. Так что какой-то буфер перед ним все равно потребуется.
|
|
|
|
Текстовая реклама в форме ответа Заголовок и до четырех строчек текста Длина текста до 350 символов Купить рекламу в этом месте! |