Создание отдельной таблицы для статистического счетчика в MySQL? - PullRequest
0 голосов
/ 16 сентября 2011

У меня есть таблица для сообщений в виде идентификатора, заголовка, содержимого и т. Д. Я только что добавил столбец в качестве счетчика. Это простой счетчик посещений, так как каждый раз он будет обновляться как $ i + 1. В этом методе я обновляю таблицу при каждом посещении, сразу после чтения строки (в одном сеансе mysql).

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

1 Ответ

1 голос
/ 16 сентября 2011

Итак, мой ответ - это зависит от того, что вы пытаетесь сделать. Я собираюсь дать вам некоторую скрытую информацию о MySQL, чтобы вы могли решить, когда имеет смысл, а не создавать таблицу счетчиков.

MySQL имеет разные движки таблиц. Когда вы создаете новую таблицу, вы указываете, какой механизм использовать, наиболее распространенными являются MyISAM и Innodb . MyISAM действительно хорош и быстр в выполнении выборок, а Innodb действительно быстр в выполнении вставок. Между ними есть и другие различия, но хорошо понимать, что выбранный вами двигатель важен.

Исходя из вышеизложенного, если у вас есть таблица, которая обычно читается и содержит тонну строк, возможно, имеет смысл сохранить эту таблицу как MyISAM и создать отдельную таблицу счетчиков с помощью Innodb, которая будет обновляться. Если вы реализуете кэш, это еще одна причина, по которой эта модель будет работать лучше, поскольку вы не будете очищать кэш для данных таблицы каждый раз, когда обновляете счетчик, поскольку вы будете обновлять счетчик для другой таблицы.

Теперь некоторые могут возразить, что вам следует использовать Innodb, потому что он имеет гораздо больше преимуществ, но есть стратегии репликации, которые позволят вам сделать лучшее из обоих миров.

Я надеюсь, что это дает вам общее понимание, чтобы вы могли копать глубже и найти свой ответ. Больше информации на: http://www.mysqlperformanceblog.com/2007/07/01/implementing-efficient-counters-with-mysql/

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