powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как рационально сделать счетчик?
12 сообщений из 12, страница 1 из 1
Как рационально сделать счетчик?
    #38816638
Фотография alexnews
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень давно я считал посещаемость выделяя селектом нужную статью и добавляя ++ затем записывая апдейт

Код: plsql
1.
2.
SELECT visitors FROM history WHERE id='$id';
UPDATE history SET visitors='$visitors' WHERE id='$id';


Понятно что это было совсем глупо и я упростил до одной строки:

Код: plsql
1.
UPDATE history SET visitors+1 WHERE id='$id';



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

Можете подсказать какую тактику предпринять? Может стоит вынести кол-во посещений в отдельную таблицу, но тогда придется постоянно проверять есть ли номер такой статьи в базе, так как в день добавляется по 6-10 статей. А это еще одна операция проверки чего хотелось бы избежать.
...
Рейтинг: 0 / 0
Как рационально сделать счетчик?
    #38816650
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexnews,

Движок таблицы какой?
innodb_flush_log_at_trx_commit чему равен?
...
Рейтинг: 0 / 0
Как рационально сделать счетчик?
    #38816671
Фотография alexnews
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

| innodb_flush_log_at_trx_commit | 1 |

но сама таблица MYISAM
...
Рейтинг: 0 / 0
Как рационально сделать счетчик?
    #38817124
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexnews,

сделай расслоение счётчика на, скажем, 100 слоёв (частей), каждый сбрасывай в начале суток и увеличивай отдельно. В конце суток сливай всю информацию в главный счётчик (суммируя все слои).

Расслонение делай по идентификаторам пользователей или сессий по mod 100 (или ещё как-то).
...
Рейтинг: 0 / 0
Как рационально сделать счетчик?
    #38817129
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexnewsmiksoft,

| innodb_flush_log_at_trx_commit | 1 |

но сама таблица MYISAMЯ бы предложил преобразовать в InnoDB и сделать innodb_flush_log_at_trx_commit=2
...
Рейтинг: 0 / 0
Как рационально сделать счетчик?
    #38817130
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexnewsmiksoft,

| innodb_flush_log_at_trx_commit | 1 |

но сама таблица MYISAM

Это хреново. Как Inno разводит транзакции -- понятно. Как это делает MyISAM -- вообще загадка.
(я мог бы прочитать документацию, но не собираюсь этим заниматься, поскольку как не ACID-субд может
обрабатывать ACID- транзакции мне совершенно неинтересно знать).

Я бы поменял тип движка хотя бы для этой конкретной таблицы.
...
Рейтинг: 0 / 0
Как рационально сделать счетчик?
    #38817132
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivРасслонение делай по идентификаторам пользователей или сессий по mod 100 (или ещё как-то).

Да, главное, чтобы статистически изменения по всем счётчикам были распределены равномерно.
...
Рейтинг: 0 / 0
Как рационально сделать счетчик?
    #38817133
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivКак Inno разводит транзакции -- понятно. Как это делает MyISAM -- вообще загадка.Как раз не загадка - совсем не разводит. Тупо блокирует всю таблицу.
...
Рейтинг: 0 / 0
Как рационально сделать счетчик?
    #38817135
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivMasterZivРасслонение делай по идентификаторам пользователей или сессий по mod 100 (или ещё как-то).

Да, главное, чтобы статистически изменения по всем счётчикам были распределены равномерно.Тут, кстати, удобно делить на 256 частей и использовать последний (младший) байт в ip-адресе клиента. Они распределены практически равномерно.
...
Рейтинг: 0 / 0
Как рационально сделать счетчик?
    #38817415
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftMasterZivКак Inno разводит транзакции -- понятно. Как это делает MyISAM -- вообще загадка.Как раз не загадка - совсем не разводит. Тупо блокирует всю таблицу.

Ну тогда для этого случая достаточно безразлично, какой тип движка -- что он всю таблицу из одной записи блокирует, что только одну запись в таблице.

Конечно, для расслоения перевод на Inno обязателен.
...
Рейтинг: 0 / 0
Как рационально сделать счетчик?
    #38817418
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivтаблицу из одной записи блокируетТак запись не одна. Там еще некий WHERE id='$id' присутствует.
...
Рейтинг: 0 / 0
Как рационально сделать счетчик?
    #38817421
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftMasterZivтаблицу из одной записи блокируетТак запись не одна. Там еще некий WHERE id='$id' присутствует.

А и правда -- забыл я ...
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как рационально сделать счетчик?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]