Rails: обновление пользовательского поля при каждом запросе (как оптимизировать) - PullRequest
0 голосов
/ 04 февраля 2012

Я должен обновлять поле в базе данных MySQL при каждом HTTP-запросе (количество посещений страницы). Иногда я должен сделать это и для статических файлов. В среде с высокой нагрузкой это может потенциально блокировать ответы, потому что база данных MySQL может выполнять один процесс обновления (для каждой записи) за раз.

Я думал о

  • добавление файла и его анализ в фоновом режиме каждые X минут
  • запись записей журнала в базу данных MySQL (специальная таблица) и выполнение фоновая обработка

Как бы вы это оптимизировали?

1 Ответ

2 голосов
/ 04 февраля 2012

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

Если вы достигли пределов параллелизма mysql, рассматривали ли вы возможность использовать другое хранилище данных для этой информации? Например, mongodb очень хорошо адаптирован к подобным операциям вставки, поскольку он имеет широкий спектр операций обновления «запускай и забывай», известных как модификаторы

Например, вы можете сделать что-то вроде

db.pagecounters.update({name: 'x'}, {$inc: {count: 1}}, true)

При этом будет найден объект pagecounter с именем x и счетчик приращений на 1 (если счет существует) или установленный счетчик на 1. Если такого счетчика страниц не было, он создаст один

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...