• Архитектура сервиса обработки задач [PHP]?

    @Vitsliputsli
    Дмитрий, со стабильностью у php нет никаких проблем. Да и, правильно организованная очередь в БД работает также хорошо, как и при использовании брокера сообщений. Проблема у автора в том, что единственный воркер получив задание обрабатывает его долго, та же отправка email процесс не быстрый, все время пока воркер ждет ответ при обработке задания новых он не берет. Соответственно те же проблемы будут и с брокером очередей, воркер один, и время работы будет очень большим.
    Самое простое решение, как уже указали, использовать несколько воркеров, столько, сколько будет оптимальным. Для этого проще всего запускать их в разных процессах, чем использовать потоки или подключать асинхронность.
  • Как организовать алгоритм поиска по массиву ключевых слов?

    @Vitsliputsli
    Inajaf, готового нет, так как все зависит от задачи. Выше описано несколько алгоритмов и они будут давать разный результат. Если выберите расстояние Левенштейна, то учтите, что при сравнении придется накладывать эту функцию на каждую пару сравниваемое-образец. Т.е. это фулскан таблицы словаря, в зависимости от размера словаря и необходимой скорости ответа может и не подойти. Как вариант дерево Буркхарда-Келлера, но оно эффективно при получении одного ответа, при желании получить несколько, скорость работы будет деградировать очень сильно.
    Примерно также с трехграмным поиском.
    Фонетический анализ проще, мы в словаре можем хранить сформированный код и поиск будет по нему, здесь уже будут работать индексы и скорость будет высокой. Проблема здесь в том, что различные функции могут дать разные и очень неожиданные результаты. И дело не только в том, что они захватят лишнее, они могут не выдать очень похожие результаты.
    Что касается синонимов в словаре, то группируете их (какое-нибудь поле group_id) и при совпадении одного слова выводите все слова группы.
    Все очень зависит от ваших требований, быть может будет достаточно сравнения по расстоянию Левенштейна с определенным порогом чувствительности, как написал mayton2019.
  • Как организовать алгоритм поиска по массиву ключевых слов?

    @Vitsliputsli
    mayton2019, да, вы правы, для задач автора вполне может и подойти. Я рассматривал только с точки зрения задачи на более-менее точное совпадение.
  • Как ускорить webhook или последовательное выполнение одного php скрипта за другим?

    @Vitsliputsli
    Алексей, суть ответов в том, что вы кладете в очередь, а далее воркеры ее обрабатывают. Совсем не обязательно для этого подымать брокер сообщений. Вполне можно сделать очередь в БД.
  • Как организовать алгоритм поиска по массиву ключевых слов?

    @Vitsliputsli
    mayton2019, а ложно-положительные срабатывания? Если я задам порог чувтствительности 5, то Левенштейн и Бронштейн будут одним и тем же. Если брать относительную чувствительность, т.е. поделить на кол-во букв в слове, то
    Джон отличается от Джонатану на 125%
    Джонатану от Джон на 55%
    Левенштейн от Бронштейн на 55%
  • Как понять/выучить ООП Python?

    @Vitsliputsli
    Nazar Markelov, имеетя ввиду, что python ООП неполноценный язык, чтото решается в нем "вручную", что-то не решается вообще. Если хочется ООП, то python плохой выбор. Если выбран python, а ООП нужно как его составляющая, то не вопрос.
    Что такое ООП информации море. Как оперировать объектами в python тоже. Изучите синтаксис и пишите код, и смотрите как это делают другие (не в видосиках, а у спецов, например, в либах к языку). Понимание, что такое на самом деле ООП придет позже.
  • Как понять/выучить ООП Python?

    @Vitsliputsli
    ООП это в первую очередь оперирование объектами, главное понять что, объект это не просто набор функций как в процедурном подходе.
    И, все таки, не любой язык, python как раз не имеет модификаторов доступа и не только их.
  • Как организовать алгоритм поиска по массиву ключевых слов?

    @Vitsliputsli
    mayton2019, Джон и Джонатану, Левенштейн по ним даст различие 5, т.е. по нему это абсолютно разные вещи.
    Триграмный поиск упрется в тоже самое.
    Фонетический анализ тоже мало чем поможет, разве что в варианте Джон и Джонатану, и то, только за счет совпадения начал слов.
    Здесь только словарь и никак иначе, это реально разные слова.
  • Не хожу на работу, но меня не увольняют и не платят зарплату, как быть?

    @Vitsliputsli
    Николай Савельев, тогда очень странно. Напиши, пожалуйста, как выяснится, если выяснится, что все таки это было. Очень интересно.
  • Как установить соединение websocket c wss на http?

    @Vitsliputsli
    Если их нет - сгенерируйте новые
  • Не хожу на работу, но меня не увольняют и не платят зарплату, как быть?

    @Vitsliputsli
    Николай Савельев, тогда не факт, что он работает. Если он не подписан работодателем, то он не заключен. Также есть еще понятие "допуск к работе", могут и на него сослаться.
    Но, если в электронной трудовой уже есть запись, то очень странно.
    Про резидентство я упомянул, как стимул разорвать договор, если это интересно. Там не обязательно полгода, резидентство можно и раньше поменять.
  • Изучение PHP: можно ли пропустить изучение процедурного стиля и изучать ООП?

    @Vitsliputsli
    gd1xza, автор хочет изучать ООП, поэтому неполноценный в этом плане python - плохой кандидат.
  • Как работать с двумя и более базами данных одновременно?

    @Vitsliputsli
    Little_Junior, в первую очередь нужно задать себе вопрос, а зачем вы вообще делили на 2 базы данных? Если они неразрывно связаны и просто для логического деления, то ответ очевиден. Если эти базы независимы и в перспективы могут быть разнесены на разные серверы, то тоже понятно. Во втором случае, если вы боретесь за каждую мс, то можно сделать подключения в разных объектах, но которые будут использовать одно физическое подключение, подставляя нужное название базы при каждом обращении к таблице. В таком случае, будет легко переключиться на работу на двух физически разных СУБД.
  • Что лучше, генерировать каждый раз или один раз?

    @Vitsliputsli
    В первом случае при генерациями каждый раз возникают запросы в базу, во втором случае количество запросов меньше, но надо хранить много файлов и следить за ними: удалять при обновлении исходного документа, как пример.

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

    @Vitsliputsli
    Автор хочет 2 отдельные строки, чтобы можно было с ними отдельно работать.
    Тут sed излишен, можно обойтись и встроенным оператором баш. Но если очень хочется на sed, то нужно изменять обработку отдельных строк на весь текст, либо мудрить с буффером, либо просто использовать другой разделитель для перевода строк.
  • Какую область программирования выбрать PHP или Java?

    @Vitsliputsli
    Писать плохой код очень легко на любом языке. Вера в то, что язык тебя от этого убережет как раз и приводит к написанию плохого кода в больших количествах, что мы и видим на примере Java.
    В PHP есть все инструменты для написания хорошего кода, но есть и огромный пласт обеспечивающий обратную совместимость версий, позволяющий писать плохой код. И есть огромное кол-во кода демонстрирующее самые ужасные подходы. И что ты выберешь, зависит не от языка.
    Еще хуже дела с JavaScript, так как авторы посчитали, что у них свой "особый" путь. Но он как раз уже практически не используется, во всяком случае там, где заботятся о качестве кода. Т.к. несмотря на монополизированность, есть хорошая замена в виде TypeScript.
  • Какую область программирования выбрать PHP или Java?

    @Vitsliputsli
    Just Me,

    PHP и Java давно идут на убыль

    Как и C#, C++, C, и все остальные языки. Такие заявления мы видим из года в год. И пока, одни используют их как повод чтобы не учить языки, другие учат, и успешно зарабатывают деньги.
  • Как подключить нового пользователя к одному сокету?

    @Vitsliputsli
    Порт он слушает, но читает данные по конкретному установленному соединению. А надо еще и новые соединения принимать, а потом и по ним данные читать. А значит нужна асинхронность. И тут проще взять готовое решение для WebSocket, чем писать все с нуля.
  • Как оптимизировать запрос с большим количеством данных в таблице?

    @Vitsliputsli
    не знаю как оптимизировать

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

    Возможно ли это сделать без добавления индексов на столбцы, так как размер таблицы сильно увеличится

    сперва постройте индексы и посмотрите, что получится. И по резултату будете переживать о лишнем гигабайте на hdd. Текущее описание, не позволяет говорить о чем-либо ином. Шардирование не такая уж простая штука, поэтому совет "разбейте на таблицы", и уж тем более "по годам", скорее принесет только проблемы, чем существенный выигрыш.

    mayton2019,
    Тестовые запуски нужно делать по холодному. Тоесть по тем данным которые еще не запрашивались. Это гарантирует честность результата. В противном случае ты будешь мерять отклик буферного кеша вместо диска. И такой результат будет красив - но в будущем не будет отражать действительность.

    СУБД, как правило, работают именно с кешем, специальным buffer pool, дисковым кешем, но с кешем. Если СУБД постоянно лазает на диск за данными, ни о какой высокой скорости там речи вообще не будет. Т.е. будут отдельные небыстрые запросы при "холодной" загрузке страниц, но общий поток будет быстрым. И вряд ли, у автора как-то иначе, вряд ли у него жесткое правило, что любой запрос должен отрабатывать менее X мс. Понятно, что бывают разные задачи, но в большинстве случаев именно так, и именно для такого использования СУБД и проектируются.
  • Что не так в коде (можете сделать краткое код ревью)?

    @Vitsliputsli
    Евгений Иванов,
    Но ООП в скриптовых языках, как я понимаю, и есть использование статики. Во всех фреймворках очень много обращений к статическим методам. Да, иногда создают экземпляр класса.

    Мне сложно создавать объекты в языке, где срок жизни скрипта ограничен.

    Нет, ООП - это оперирование объектами, статика - это не объекты. Без разницы скриптовой язык или нет. Без разницы какой срок жизни скрипта. Что значит "сложно писать"?

    Я не могу создать подключение к бд 1 раз и хранить ссылку на него. Скрипт завершился - память отчищена. Это не десктопное ПО, где программа работает, пока её не закрыл пользователь.

    Да, но не для каждого же запроса создавать новый коннект.

    Знаю. Так и написал TODO фильтрация данных. Ну и нужны подготавливаемые запросы.

    Видел, но для борьбы с SQL-инъекциями надо использовать подготовленные выражения. А фильтрация SQL с подставленными данными бесполезна.

    Я прочитал несколько статей по MVC и посмотрел много видео. И так до конца и не понял, что есть MVC.
    У каждого MVC - свое. У каждого модель и контроллер что то свое.
    У одних больше логики в модели, у других в контроллере. Одни не любят толстые контроллеры, другие наоборот. Реализация данного паттерна мне не до конца понятна.
    Я считаю, что Модель - это БД, вид - это шаблон, контроллер - это файл/группа файлов которые отображают данные из модели в шаблоне и изменяют состояние переданное из шаблона (пользователь кликнул по кнопке) в модели (БД).

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