@skynino

Как обновлять каждую секунду значение в MySQL посредством PHP?

Добрый день.
Существует следующая задача:
У user-а в БД есть отдельное поле "account". При совершение определенного действия в это поле каждую секунду должно добавляться определенное число, например 1. Итого через минуту число должно увеличиться на 60.
Код пишется на PHP.

Какими способами можно реализовать данную задачу?

Пока в голове крутиться 2 варианта:
1. Как мне кажется из каменного века. Создать отдельное поле, в которое я сохраняю точное время инициации действия. В тот момент когда мне надо показать пользователю поле "account" я показываю account + ( (дата инициации дейтсивя обновления поля accoutn) - (дата отображения поля) )*(нужный параметр добавления)
2. Писать сторонний микросервис, который будет отправлять каждую секунду запросы в БД и увеличивать значение.

Во втором случае, не совсем понятно как это сделать средствами PHP. Может подкините какую-нибудь информацию, что изучить.
  • Вопрос задан
  • 1477 просмотров
Пригласить эксперта
Ответы на вопрос 4
Wolfnsex
@Wolfnsex Куратор тега PHP
Если не хочешь быть первым - не вставай в очередь!
Как мне кажется из каменного века. Создать отдельное поле, в которое я сохраняю точное время инициации действия. В тот момент когда мне надо показать пользователю поле "account" я показываю account + ( (дата инициации дейтсивя обновления поля accoutn) - (дата отображения поля) )*(нужный параметр добавления)
"Долбить" базу каждую секунду, без особой на то нужды, когда можно этого не делать - плохая идея. Данное решение описывает более рациональный подход, если он конечно возможен.

Писать сторонний микросервис, который будет отправлять каждую секунду запросы в БД и увеличивать значение.
Не знаю, что Вы подразумеваете под "сторонним микросервисом" и как это в конечном итоге должно работать (логически), например при нагрузке, запросы могут вставать в очередь и данные могут терять свою актуальность в этом (вашем) случае... Можете попробовать несколько вариантов:

1. Попробовать использовать "родные" события MySQL

2. Создать примитивный скрипт PHP, типа такого и запустить его (на бесконечное выполнение):
<?php
while(true) {
mysql_query("..."); //Условно
sleep(1);
}
но, он будет выполняться не 1 раз в секунду, а с паузой в 1 секунду

3. Загадить крон заданиями, в кол-ве около 60 штук (т.к. крон задания запускаются минимум 1 раз в минуту), как это примерно должно выглядеть описано здесь, что в целом тоже не очень надёжно, т.к. высока вероятность, что рано или поздно, запросы могут отвалиться, приводя тем самым самым данные в неактуальное состояние.
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
IMHO, второй способ - это какое-то извращение. Вместо того, чтобы раз в час по запросу пользователя посчитать прошедшее время, каждую секунду дёргать базу на запись? А если сервер надо будет перезагрузить, то прошедшие две-три-пять минут вообще не учтутся?
Ответ написан
Комментировать
VladimirAndreev
@VladimirAndreev
php web dev
откройте для себя crontab =)
Ответ написан
2ord
@2ord
Операция SELECT дешевле UPDATE, поэтому я за 1-й вариант. Тем более 1 операция в момент показа или N операций каждую секунду.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы