Задать вопрос
  • Какой инструмент применить чтобы избавиться от блокировки таблиц в БД, если доступ нужен по очереди?

    @Vitsliputsli
    Akina, надо еще не забыть: WHERE оператор is null. И разумеется не в рамках транзакции делать.

    Блокировки никуда не денутся в этой схеме, но из-за простоты 1 запроса, все должно работать быстро и особых проблем не возникнет.
    Вообще, даже если у автора сотни операторов на проекте, это не будет представляться проблемы во время работы, т.к. обращаться за заявками они будут в разное время. Но есть пиковый момент, когда операторы в ожидании и заявки поступают в обзвон. В этот момент все операторы ломятся на сервер за заявками, ктото успевает заблокировать 1 запись под update, остальные блокируются и ждут, update завершается, остальные получают ответ "приходите позже". Разумеется, эти запросы размазаны по времени, но чем больше операторов и чем медленнее СУБД, тем будет больше очередь. Кроме того, когда "вернулось ноль номеров", это может значит, что заявки закончились, тогда врубается пауза чтобы не кошмарить СУБД запросами, по истечении этой паузы все опять ломанутся за заявками, а из-за пауза ожидание увеличивается.
    Повторюсь, из-за скорости работы одиночного update, все должно быть норм, но если нет, то можно паузу делать немного рандомной, либо проверять попал оператор на блокировку или действительно закончились заявки и в первом случае не ждать, а снова мучить сервер.
    Теоретически, здесь хорошо подходит select for update skip locked - когда мы не ждем освобождения блокировки и уходим ни с чем, а просто берем следующую запись. Но нужно попробовать и убедится, что в конкретной СУБД все работает корректно.
  • Какой инструмент применить чтобы избавиться от блокировки таблиц в БД, если доступ нужен по очереди?

    @Vitsliputsli
    Оптимизируйте запрос, чтобы он выполнялся быстрее: добавьте соответствующие индексы, проверьте что транзакция открывается при самом запросе, а не где-то загодя. Вообще проверьте, что именно тормозит в выполнении транзакции. Почему транзакция блокирует таблицу? Почему всю таблицу? И почему вообще блокирует, какой у вас уровень изолированности транзакций?
    С учетом "есть таблица заявок, которые обзванивают операторы", что-либо сложнее делать нет смысла, вряд ли у вас там высокая нагрузка.
  • Не могу юзать namespace?

    @Vitsliputsli

    там не сказано, что php-код с namespace нужно вставлять в самый вверх html файла

    Наоборот, именно это там и сказано, только не html, а php. Напомню у вас php скрипт, а не html
  • В чем минусы событийно ориентированного подхода?

    @Vitsliputsli
    Stalker_RED, не говорю, что одна или другая лучше, они для разных задач. Но вы не правильно описываете вариант, не должна каждая точка знать все обо всех, она получает сообщение и делает действие, а решать кто должен получить это сообщение, а кто нет будет уже другой объект, в компетенции которого будет как раз принятие таких решений.
  • В чем минусы событийно ориентированного подхода?

    @Vitsliputsli
    vitaly_74, сам факт - да. Но, одно дело, когда объект получает информацию что произошло событие: например, что подключился еще один пользователь, а "объект - счетчик подключений" реагирует инкрементируя внутреннюю переменную с кол-вом подключений. Другое дело, когда произошло тоже самое событие, и объект получает сообщение "инкрементируй счетчик". Т.е. он ввел понятие, что мы не манипулируем данными, скажем вызывая процедуру инкремента для переменной, которая принимает конкретный тип данных, а данные инкапсулированы в объект, который сам знает что делать, на основе сообщения в котором просьба провести инкремент счетчика. Это отличается от шаблона, когда subscriber получил только событие, а что он будет делать зависит от него. Если я, конечно, ничего не путаю.
  • В чем минусы событийно ориентированного подхода?

    @Vitsliputsli
    Насколько я помню, Алан Кей особо выделял что объекты взаимодействуют путем сообщений (message), а не реагируют на события (event). Т.е. объект получает информацию, не о том, что что-то произошло и реагирует на это, а получает предложение выполнить некое действие, а действие он выполняет исходя из того, каким объектом он является.
  • Почему эти значения равны в php?

    @Vitsliputsli
    Онотолий, неважно что говорю я, есть мануал, загляните в него:
    https://www.php.net/manual/en/language.types.type-...
    https://www.php.net/manual/en/language.operators.c...
    '9 9' == 9
    это сравнительный контекст, в котором в правой части число, а в левой части строка. Строка будет преобразована в число и получится 9. Сравнение 9 и 9 даст true.
    Начиная с php8 будут использованы иные проверки и результат будет другой.
  • Как на PHP подготовить вставить HTML в JSON строку?

    @Vitsliputsli
    Сергей Кореневский,
    А вообще странно то что функция json_encode() не хочет принимать строку.

    Все там "дописано", в легкую принимает:
    php > echo json_encode('q');
    "q"
  • Как на PHP подготовить вставить HTML в JSON строку?

    @Vitsliputsli
    Сергей Кореневский,
    Да у меня там JSON длинный. А создавать новый массив для сериализации как то не хочется.
    Тем более это вопрос экранирования и очистки.

    Это не вопрос экранирования и очистки, а вопрос написания велосипедов и разбирательств, что там в этом велосипеде накосячено. Затем, когда текщий косяк поправите, все свалится в другом месте на новых данных. И это при том, что есть уже готовое отлаженное решение.
    Какие причины этим заниматься?
  • Как написать многострочный скрипт в одну строку?

    @Vitsliputsli
    Sinot, да, возможно в sh или что там, echo соответствует echo -e в bash
  • Как написать многострочный скрипт в одну строку?

    @Vitsliputsli
    Sinot, там не bash используется, поэтому не распознает. Попробуйте так:
    printf "echo 1 \n echo 2" | bash
  • Как написать многострочный скрипт в одну строку?

    @Vitsliputsli
    Sinot, разумеется ; работает. Но, преобразовать многострочный скрипт в одну строку просто соединив все строки через ; не для всякого получится.

    На тестовом стенде стоит Ubuntu 22.04.1, именно эта конструкция в Zabbix не работает, если убрать -e - работает.

    Должно работать, тем более на ubuntu, покажите что пишет
  • Создание классов в цикле?

    @Vitsliputsli
    Павлуша,
    А я сделал так, чтобы все классы лежали в одном файле и все работало.

    Автозагрузку можно настроить как угодно, но выше писали, что есть стандарты PSR для автозагрузки, и всегда следуют им.
  • Создание классов в цикле?

    @Vitsliputsli
    Павлуша, как сделать из массива (более-менее нормальные решения):
    class MyClass
    {
      public function myFunction(): string
      {
        return get_class($this);
      }
    }
    
    class FirstClass extends MyClass {}
    class SecondClass extends MyClass {}
    
    foreach (['FirstClass','SecondClass'] as $className) {
        var_dump((new $className)->myFunction());
    };

    или так:
    class MyClass
    {
      public function __construct(private string $name) {}
    
      public function getName(): string
      {
        return $this->name;
      }
    }
    
    foreach (['first','second'] as $var) {
        $$var = new MyClass($var);
    };
    
    var_dump($first->getName());
    var_dump($second->getName());
  • Создание классов в цикле?

    @Vitsliputsli
    mrStrike, пока мы не знаем, какую задачу на самом деле он пытается решить, что либо утверждать нельзя.
    Если речь про алиасы, то это точно будет убого. Обращение к одному и тому же под разными именами, лишь будет путать.

    Скорее всего, автору нужно, как уже писали, банальное наследование. Но быть может и генерация классов, если, например, он будет собирать класс комбинируя методы.
  • $id_active_question - это какая нотация?

    @Vitsliputsli
    Дополню, camel case бывает 2х видов:
    1) выше описанный dromedary - $idActiveQuestion
    2) и Pascal, где все слова идут с большой буквы - $IdActiveQuestion

    В PHP по одной из самых распространненых нотаций названия классов пишутся по 2 варианту, а названия переменных по 1му:
    class TestClass {
        private $testVariable;
    }
  • Возможно ли вывести график из zabbix на свой сайт?

    @Vitsliputsli
    Придется авторизовываться не только на сайте, но еще и в Zabbix. Да и торчащий наружу Zabbix - это както стремно.
  • Сколько байтов нужно для хранения 60 паролей (или как переводить биты в байты без ошибок на любом этапе задачи)?

    @Vitsliputsli
    mayton2019, в принципе - да, проблема именно в формулировке, вполне возможна задача, когда нужно хранить данные затрачивая как можно меньше бит. Но раз речь про регистрацию на сайте, значит эти пароли нужно не просто один раз сохранить, но и пользоваться ими, а в этом случае подобная экономия сыграет плохую службу.
    Кстати, "длина пароля - ровно 11 символов" - больше похожа именно на хеш, странный (опять же из-за несоответствия машинному слову), но хеш. Поэтому в задаче можно было бы написать, что это хеш, а если не хочется усложнять задачу такими словами, то выкинуть упоминания про пароли, и написать просто про хранение строк фиксированного размера.
    Хотя наверное просто занудствую, описать очень простую и жизненную задачу не всегда просто.
  • Сколько байтов нужно для хранения 60 паролей (или как переводить биты в байты без ошибок на любом этапе задачи)?

    @Vitsliputsli
    mayton2019, это задача чисто математическая, т.к. мало связана с компьютерной техникой. Подобное хранение очень неоптимальное и работа с таким форматом хранения на стандартных процессорах будет медленной. Начиная с преобразования всех этих сваленных в кучу битов в нормальные отдельные символы по байтам, заканчивая медленным доступом к кускам по 9 байт, не разбитых по машинным словам.