Задать вопрос
  • Пойдет ли оперативная память?

    xez
    @xez
    TL Junior Roo
    Лучший способ купить память - выбрать из этого списка:
    https://download.gigabyte.com/FileList/Memory/mb_m...
    Ответ написан
    Комментировать
  • Актуальны ли админ панели на PHP?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    как мне очень трудозатратно, нужно разделение фронт и бек, или хороший фулстек программист.
    как правило если у вас SAAS сервис и требуется клиентоориентированный интерфейс то 90% индивидуальная админка + rest.
    если же cms которая теражируется клиентам, должна иметь возможность кастомизироваться то подойдет многостроничник на bootsrap, с twig и фреймворком.
    Ответ написан
    Комментировать
  • Актуальны ли админ панели на PHP?

    "Все" давно уже делают сайты без программирования - на Тильде или Битриксе (да, другие "все" знают, что Битрикс - [да]вно, но жизнь такова, что первые "все" продолжают его хавать).
    Ещё более другие "все" (те, которые разрабатывают не сайты, а веб-приложения или/и веб-сервисы), как правило, программируют "админки" на том, что лучше знают, или что им больше нравится.
    И эти "все", да, всё чаще делают фронт а-ля SPA, а на бэке остаётся только API.
    Ответ написан
    2 комментария
  • Какие сложности ожидают при переделке проекта с mysql на sqlite в Laraver?

    DevMan
    @DevMan
    В проекте потребовалось освободиться от СУБД вообще.
    a ничо, что sqlite – СУБД?
    Ответ написан
    3 комментария
  • Регулярное выражение?

    array_filter(explode("|","|1|2|"))
    Ответ написан
    Комментировать
  • Что ещё учить WEB-разработчику на Python?

    @xilysh
    Не хватает тебе полноценного знания питона, наверное. Прежде чем изучать фреймворки, желательно знать нормально ЯП.
    Ответ написан
    2 комментария
  • Как сформировать SQL запрос many to many?

    Kleindberg
    @Kleindberg Автор вопроса
    Full stack
    Пока что нашел такое решение:
    SELECT
        p.name,
        c.count_product,
        p.price,
        s.sum_sale,
        s.date
    FROM
        product AS p
    INNER JOIN cheque AS c
    ON
        p.id = c.id_product
    INNER JOIN sale AS s
    ON
        s.id = c.id_sale
    Ответ написан
    Комментировать
  • Как получить часть строки через MySQL запрос?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Если порядок всегда один и тот же, то можно через SUBSTRING_INDEX(). Разбить по кавычкам и взять нужные подстроки.
    Начиная с версии 8.0 можно через REGEXP_SUBSTR().
    Но, по хорошему, надо парсить строку до занесения в базу и записывать уже чистые значения.
    Ответ написан
    1 комментарий
  • Как удалить определенный тег внутри тега?

    DevMan
    @DevMan
    да перестаньте уже насиловать мозг регулярками там, где они не нужны.
    любой XML (и HTML в частности) давно отлично разбирается и обрабатывается стандартными средствами.
    dom parser и xpath к вашим услугам.
    Ответ написан
    2 комментария
  • Можно ли ставить всегда после открывающихся и перед закрывающимися круглыми скобками пробел?

    DevMan
    @DevMan
    можете хоть несколько ставить.
    или вообще переносить на новую строку/строки.

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

    @rPman
    Избавляйся от ... where fld like '%...%' это самые плохие по скорости запросы, хотя не всегда это возможно без увеличения размера базы, вообще полнотекстовый поиск можно отдавать на откуп стороннему приложению (это может расширить возможности фильтрации), считай это еще одной формой индекса, хотя лучше данные по другому хранить. Я встречал ситуации когда в varchar хранили значения справочника из десятка значений, но делали по нему like %% что грузило базу прилично, когда как сделать простой комбобокс на порядок эффективнее и удобнее - поиск по подстроке лучше по справочнику делать на клиенте.

    Без индексов скорее всего никуда, если в запросе идет фильтрация по полю, то если не создать на него индекс, этот запрос и будет создавать нагрузку

    В некоторых специфических случаях, можно делать запросы заранее (для более шустрой пагинации например), запрашивая сразу несколько страниц наперед, с учетом движения вперед (и возможно назад, в общем прогноз должен предполагать что перелистывание продолжится), запрос на будущие записи делать заранее, пока пользователь смотрит текущий результат. Недостаток подхода - при удачном прогнозе действий пользователя отзывчивость интерфейса повышается, как и средняя нагрузка на базу. Так же добавляет отзывчивости если окно запроса будет больше окна отображения (т.е. для отображения 10 строк запрашиваешь 30, начиная с предыдущей страницы)

    Частный случай прогноза, не делать select ... limit ... на каждую страницу, а при смене фильтра запрашивать весь диапазон, но только идентификаторы, сохранив их либо в таблице на сервере либо на бакэенде, генерирующим запросы вида select ... id in (...), последнее если количество записей не больше тысяч. Кстати именно постраничная навигация с прогруженным списком id самая шустрая

    Кешируй результаты запросов, можно на клиенте, можно даже средствами браузерного кеша, очень часто работа человека состоит в перемещении туда сюда по своим запросам, так зачем нагружать лишний раз сервер тем что уже известно. Осторожно с инвалидацией данных, и кстати не всегда она так уж и критична.

    Некоторые фильтрации данных возможно эффективнее делать на клиенте, как бы это странно не звучало, но клиент по скорости работы может даже превосходить сервер, так почему бы часть данных не хранить в принципе на нем и не фильтровать там же, но это зависит от особенности данных, гонять и хранить гигабайты клиенту не удобно (особенно если это браузер). Это может сильно усложнить алгоритм пагинации, но подумай, так ли человеку нужно знать какой номер строки у него сейчас, обычно достаточно понимать общий прогресс (сколько примерно до конца списка и сколько данных в принципе).

    p.s. диск на сервере hdd или ssd? если не хватает денег на большой ssd, настрой маленький ssd как кеш к медленному hdd (linux bcache), даже когда данные полностью не влезают в кеш, это дает заметный прирост, потому что hdd начинает менее случайно двигаться, плюс добавляется буферизация записи (данные записываются на ssd и лежат там пока hdd не освободится), так же дает эффект ускорения записи вынос журнала файловой системы (если ext4) на ssd (требуется пара гигабайт от силы).

    Осторожно, если высокие требования к надежности хранения, кеширующий ssd в режиме записи лучше пусть будет хотя бы raid1, так как иначе при смерти ssd починить данные, размазанные по диску и кешу будет очень сложно. Для кеша только для чтения это не так критично (при смерти ssd сервер просто упадет, не убивая данные).

    Но мне больше нравится резервирование на лету (настроить онлайн репликацию, пусть и на слабый, бакап сервер)
    Ответ написан
    1 комментарий
  • Как прочитать вторую строку .txt файла?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    <?php
    $fileObject = new \SplFileObject('file.txt');
    $fileObject->seek(1); //пропускаем одну (первую) строчку
    $line = $fileObject->current();
    Ответ написан
  • Как адаптировать код php под FreeBSD?

    Вместо использования команды можно создавать файл и перед запуском скрипта проверять, создан ли он

    if (file_exists('myscript.running')) {
       echo 'Скрипт уже работает!', PHP_EOL;
       return;
    }
    touch('myscript.running');
    
    // Тут ваш код
    Ответ написан
    3 комментария
  • Как сгенерировать код P-XXXXXXXX, где X - числа [PHP]?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    function generator($litera) {
        return mb_strtoupper($litera)."-".random_int(10000000, 99999999);
    }


    for($i = 1; $i <= 5; $i++) {
        $code = generator("P");
        echo $code."\n";
    }
    
    //P-10762100
    //P-85344418
    //P-57088151
    //P-14499009
    //P-24729321
    Ответ написан
    1 комментарий
  • Что делать с кучей HDD?

    @rPman
    Набиваешь компьютер контроллерами, расширяющими количество sata (ide и другие, какие у тебя диски), можно несколько компьютеров, и физически подключаешь диски.

    Осторожно, разные способы подключения могут задавать разные ограничения. Например USB контроллеры ограничивают совокупную скорость подключенных к ним дискам (обычно правда только один диск можно) - usb2 до 30мбайт/сек, usb3 примерно сравнимо с sata (5гбит/сек это), pci дают не больше 100мбайт/сек (133 кажется), pci-e 8 максимум выдаст 8гбит/с.
    Т.е. к примеру не пытайся к одной старой pci подключить 5 дисков, совокупная их скорость не превысит 100мбайт, что нормально для одного диска но фатально для массива.

    Теперь второе, протестируй каждый диск на линейную и не только скорость, как в начале так и в конце, плюс собери статистику (например старые диски с большим количеством перемапленых бэд секторов могут давать нормальную скорость в одном месте но плохую в другом), каждому диску пропиши скорость в наихудшем.

    Третье, собирай софтварные рейды из дисков с приблизительно равными скоростями в худшем, и тем более не все в один огромный, это бессмысленнно, но примерно два года у меня проработал конфиг (потом разобрал так как купил норм диски) из старых дисков разного размера где был собран двухуровневый каскадный рейд, где из двух дисков был собран raid0 с чередованием (это ускоряет итоговый результат без резервирования) а затем с использованием этого логического тома и трех других собран raid5, при этом размеры всех дисков были разные, и были использованы специально созданные тома на тех дисках что больше, из остатков собрал raid0 (точнее тот что предлагает btrfs это просто объединение разделов в один, последовательным присоединением) но из-за ненадежности этот хвостовой так для хранения не использовался.

    С помощью linux nbd или iscsi утилита istgt (или aoe если есть возможность выделить отдельный сетевой кабель на каждый логический диск) или даже drbd можно объединить диски с разных физический компьютеров.

    Важно, не используй аппаратные рейды - это вендорлок, к тому же дешевые встроенные в материнку не дают никакого бонуса, а дорогие тут наверное бессмысленны.

    Вместо dmraid можно использовать фичи btrfs или zfs, где функции рейда встроены в файловую систему (осторожно btrfs raid5/6 заявлены как нестабильные, я не знал, пользовался несколько лет, вроде проблем нет, даже когда менял сбойный диск, но это конечно не аргумент)

    Не стоит создавать один огромный массив, мало того, даже в пределах большого диска я создаю несколько маленьких (хотя конечно это уже от твоих задач должно исходить), так как обслуживать маленькие заметно удобнее, к примеру изменение класса raid (raid1 -> raid5) или добавление диска raid5 и переконфигурирование можно делать поэтапно, плюс raid rebuild обычно медленней пересозадания (т.е. бакапишь данные с маленького, пересоздаешь с другой конфигурацией, тем более к примеру когда сначала у тебя были 3тб диски а потом станешь докупать 4..6тб, достаточно использовать терабайтовые куски чтобы горя не знать...

    Можно пользоваться lvm или все отдать на откуп btrfs, уже твое усмотрение. Я лучше буду работать с несколькими независимыми точками монтирования, разруливая при необходимости симлинками.
    Ответ написан
    2 комментария
  • Какую технологию выбрать для работы с базой данных?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Конкретный ответ на ваш вопрос в данной формулировке дать нельзя. Многое зависит от структуры БД, от сценариев работы с ней, интенсивности запросов, соотношения запросов на чтение к запросам на запись и т.д. и т.п. Вероятнее всего, это вопрос не к СУБД, а к архитектуре вашего приложения. В целом, у меня в одном из проектов запросы на чтение по индексу из таблицы с 23 миллиардами записей укладывались в десятки миллисекунд при стандартных настройках и не особо мощном сервере.
    Ответ написан
    1 комментарий
  • Извлечь имя из текста на php возможно?

    @Flying
    Сильно зависит от реальной задачи, которая в вопросе не указана.

    Одно дело если ваш текст имеет определённый формат и вы знаете что имя в тексте точно есть и где его искать. Или вы знаете что имена могут быть не произвольными, а строго из какого-то списка. В этом случае вам, естественно, могут помочь регулярки, поиск по словарю и т.п.

    Если же речь идёт о произвольном тексте - то здесь всё сильно интереснее. Ведь имён очень много, они могут иметь разные формы (полное / краткое имя), падежи (Саша, Саше, Сашу, Сашей и т.п.), могут быть написаны с ошибками, опечатками, неоднозначностями написания (Артем / Артём), транслитом и т.п.

    Здесь я бы рекомендовал в первую очередь обращаться к специализированным сервисам. Если речь идёт о русском языке - в голову первым делом приходит, конечно же, dadata.ru и их API по стандартизации имён. Да, это стоит каких-то денег, но работает очень хорошо, могу сказать по своему опыту.
    Ответ написан
    9 комментариев
  • Как работать с большим количеством запросов?

    Использовать транзакцию и выполнять блокировку строки таблицы на запись перед увеличением значения
    Ответ написан
    2 комментария
  • Как исправить ошибку ACPI при загрузке Kubuntu 18.04?

    @rPman
    Обновления не ставил
    на сколько я помню обновления безопасности все равно включены, иначе просто непонятно, откуда проблема.

    Нужно включить логи ядра и initramfs, для этого в загрузчике grub нужно нажать F4, найти строчку с параметрами ядра vmlinuz и убрать quiet, и нажать ESC для загрузки. Последние строчки лога могут многое сказать.

    У меня похожая ситуация случалась, дважды, система не загружалась, не видела дисков... поковырявшись я предположил что последовательное обновление без перезагрузки (до полугода аптайм бывает) что то сломало в initramfs и какие то нужные модули не грузились, один раз удалось спасти ситуацию, подменив vmlinuz и initramfs взяв их из livecd той же версии (получается старой) это не паноцея, считай почти как рекавери, так как не будут работать к примеру проприетарные драйвера или другие модули типа virtualbox или kvm но можно будет поковырять из рабочей системы или сделать резервную копию баз данных и файлов. К сожалению когда это произошло второй раз, копирование с livecd не помогло, не было времени тогда разбираться, переустановил систему.

    Если livecd так же не загружается, то похоже уже аппаратная проблема. В биосе можно отключить ACPI, точнее поиграться с настройками что то отключить, что то перевести в другой режим (например отключится нормальный режим сна)
    Ответ написан
    Комментировать