Перейти к содержимому


Запуск вычисления в таблице из cron

cron вычисление

Сообщений в теме: 8

#1 Anton1

    Новичок

  • Пользователи
  • Pip
  • 6 сообщений
  • Пол:Мужчина

Отправлено 11 Январь 2020 - 11:09

В таблице есть достаточно сложное вычисление которое невозможно целиком перенести в cron, но необходимо его периодически выполнять. Сейчас выхожу из ситуации с помощью запуска в cron data_update и флага EVENTS_ENABLE. В таблице настроено срабатывание вычисления на изменение поля. Все работает, но кривизна костыля напрягает. Есть ли более правильное и изящное решение запуска конкретного вычисления через cron?

#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 706 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 15 Январь 2020 - 17:12

Более изящных вариантов скорее всего нет, любой будет тем или иным костылем. Запустить вычисление явно напрямую нельзя, только по событиям.

#3 Anton1

    Новичок

  • Пользователи
  • Pip
  • 6 сообщений
  • Пол:Мужчина

Отправлено 09 Февраль 2020 - 10:51

Какие еще события кроме изменения поля можно инициировать через крон?

И второй вопрос –
Всё это надо вот для чего – внешнее приложение изменяет напрямую данные в DB, КБ естественно ничего про это не знает, но при изменении данных необходимо запускать обработки внутри КБ. Можете подсказать какое-то решение для этого?

#4 Tony999

    Активный участник

  • Пользователи
  • PipPipPip
  • 401 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 11 Февраль 2020 - 08:46

Создаете в КБ новое задание крон, пишете там вычисление, штатными функциями КБ обращаетесь к БД, проверяете это самое поле.... а потом запускаете свою обработку. Вот и все!
КБ - помощь, проекты и решения.
Хостинг. Аренда. Продажа.
ВашаБаза.рф

#5 Anton1

    Новичок

  • Пользователи
  • Pip
  • 6 сообщений
  • Пол:Мужчина

Отправлено 11 Февраль 2020 - 12:46

Штатными средствами КБ я не смогу определить было ли изменено значение в поле, если например один текст был заменен на другой. Только если держать дубликат и сравнить, но это криво, полей может быть много.

#6 Tony999

    Активный участник

  • Пользователи
  • PipPipPip
  • 401 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 14 Февраль 2020 - 00:30

Да почему же нет?
Создаете вычисление на изменение поля "Название".

if ($line['Название'] != $event['changed']['478']['old'])
echo "Название было изменено"; // 478 - это номер поля "Название"

Сообщение отредактировал Tony999: 14 Февраль 2020 - 07:41

КБ - помощь, проекты и решения.
Хостинг. Аренда. Продажа.
ВашаБаза.рф

#7 Anton1

    Новичок

  • Пользователи
  • Pip
  • 6 сообщений
  • Пол:Мужчина

Отправлено 14 Февраль 2020 - 10:21

Это будет работать только если менять 'Название' из самой КБ, а у меня данные меняются напрямую в DB внешним приложением.

#8 Tony999

    Активный участник

  • Пользователи
  • PipPipPip
  • 401 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 15 Февраль 2020 - 11:23

Ок.
Ваше внешнее приложение меняет в DB поле "Название", при этом еще поле "Флаг" ставит в 1.
Крон каждую минуту проверяет таблицу, если поле "Флаг" = 1, то делает соотв. обработку этой конкретной записи, затем сбрасывает поле "Флаг" в ноль.
Вот и все. Система готова к новому поиску изменений в поле "Название".
КБ - помощь, проекты и решения.
Хостинг. Аренда. Продажа.
ВашаБаза.рф

#9 Anton1

    Новичок

  • Пользователи
  • Pip
  • 6 сообщений
  • Пол:Мужчина

Отправлено 15 Февраль 2020 - 22:05

Да так и делаю, и огребаю все прелести такого решения.
На каждое изменяемое поле дополнительное для флага обновления.
Не знаю предыдущего значения, это критично для отслеживания статусов задач.
Применяю эвристику для обновления зависимых полей, все на уровне вероятностей.
Криво это все, но адекватного решения пока не вижу.





Количество пользователей, читающих эту тему: 2

0 пользователей, 2 гостей, 0 анонимных