• Почему запрос так долго выполняется?

    Melkij
    @Melkij
    PostgreSQL DBA
    SELECT DISTINCT keywords.id
      FROM keywords
      JOIN images_keywords ON keywords.id = keyword_id
      JOIN images ON image_id = images.id WHERE images.space = 1

    С какой целью вы вообще в этом подзапросе джойните таблицу keywords?
    SELECT DISTINCT keyword_id
      FROM images_keywords
      JOIN images ON image_id = images.id WHERE images.space = 1

    Тот же самый результат будет.

    Вообще, джойн с подзапросом вам и не нужен
    SELECT SQL_NO_CACHE *
    FROM keywords
    WHERE keywords.id IN (
      SELECT DISTINCT keyword_id
      FROM images_keywords
      JOIN images ON image_id = images.id WHERE images.space = 1
    )

    Для mysql актуальных версий in subquery должен работать адекватно.
    Ответ написан
    3 комментария
  • Как настроить работу почты?

    посмотрите в сторону ispconfig 3
    Ответ написан
    Комментировать
  • Как и где правильно осуществлять валидацию данных в MVC?

    @rsi
    software engineer
    Все зависит от архитектуры приложения. В идеале каждый класс должен работать только с безопасными данными, то есть прошедшими все необходимые проверки.

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

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

    27cm
    @27cm
    TODO: Написать статус
    UserModel::public function register($name, $email, $password);

    Регистрирование нового пользователя это ну никак не метод UserModel. Методы моделей - это действия, производимые с объектом модели. Если бы он был статическим, это ещё куда ни шло.

    Вообще странно у вас всё устроено. Вроде бы пользователь только регистрируется, т. е. объект UserModel должен создаваться по окончанию процедуры регистрации, а у вас $user приходит на вход postRegisterUser(..., UserModel $user). А ещё потом это $user->find($request->get('id')). Что ещё за id? Если пользователя только собираетесь регистрировать, у него ещё не должно быть id, или я что-то не понимаю? Ну это так, к слову...


    В документации к различным фреймворкам, я вижу что-то вроде $form->isValid() и ни слова о том, что происходит далее.

    Чтобы понять, что происходит дальше, нужно понять, что же собой представляет $form. Это класс формы, хранящий внутри себя список названий полей ввода (в вашем случае 'name', 'email', 'password'), а также все необходимые фильтры и валидаторы для этих полей. Форма, строго говоря, ничего не знает ни о контроллерах, ни даже о UserModel, её задача - принять, отфильтровать, проверить данные, вернуть список ошибок, если данные не корректны. Для каждой html формы создаётся и конфигурируется свой класс формы. В итоге получаем что-то вроде:

    public function postRegisterUser(Request $request)
    {
        $form = $this->getRegisterForm();
        // Передаём данные $_POST. Ключи не перечисляем - форма сама разберётся, что взять
        $form->setData($request->getPost());
        if ($form->isValid()) {
            // Получаем уже отфильтрованные данные
            $data = $form->getData();
    
            // Регистрируем нового пользователя
            $user = UserModel::register($data['name'], $data['email'], $data['password']);
        }
    }
    
    static public function register($name, $email, $password) 
    {
        // Регистрируем нового пользователя
    }
    Ответ написан
    1 комментарий
  • Как снизить температуру процессора?

    alexclear
    @alexclear
    A cat
    Можно попробовать улучшить эффективность системы охлаждения. Скорее всего, у Вас сейчас используется какая-нибудь термопаста и какой-нибудь вентилятор. Скорее всего, качество термопасты можно улучшить путем замены (в интернете довольно много обзоров с тестами, например www.thg.ru/howto/test_termopast_part_2 или fcenter.ru/online/hardarticles/cooling/30249, в свое время я выбирал себе термопасту просто по спецификациям производителя, купил ту, у которой была лучшая теплопроводность). Также попробуйте заменить кулер, к сожалению, способность кулера отводить и рассеивать тепло можно узнать только путем тестирования. Я обычно ориентируюсь на характеристики воздушного потока вентилятора (часто указывается производителем в единицах cfm, cubic foot per munute) и вес, а также материал радиаторной части. Чем тяжелее радиатор, тем он эффективнее, при использовании одного и того же материала. Материал радиатора должен обладать хорошей теплопроводностью (медь лучше алюминия).
    Ответ написан
    1 комментарий
  • Как снизить температуру процессора?

    sayber
    @sayber
    Да, я программирую на PHP и еще асинхронно!
    Добрый день.
    Имею почти такой же процессор 4790К.
    Когда собрал комп, процессор при игре в тот же DL грелся как у вас.
    Затем я решил зайти в ИМ и купил себе кулер Zalman
    Теперь температура более 32 градусов не поднималась.
    Ответ написан
    2 комментария
  • Какой запрос составить для выборки изображений из базы по заданым фильтрам?

    valerium
    @valerium
    Изобретая велосипед
    По сути, что цвет, что ключевое слово - это всё тэги, то есть вполне уместно использовать связь многие-ко-многим. То есть отдельная таблица с изображениями, отдельная таблица с цветами, отдельная с ключевыми словами. И две таблицы для связей, одна связывает цвета с изображениями, другая ключевые слова с изображениями. Таким образом можно делать очень сложные выборки.

    SELECT * FROM `images` WHERE
        `images`.`id` = `keyword-to-image`.`image_id` AND
        `images`.`id` = `colors-to-image`.`image_id` AND
        `keyword-to-image`.`keyword_id` = 234 AND
        `colors-to-image`.`color_id` = 345 AND
        `colors-to-image`.`color_id` <> 543;


    То есть мы получим все изображения, к которым привязано ключевое слово с id 234 и цвет с id 345, но при этом не привязан цвет с id 543. Количество этих AND можно легко менять в скрипте. Кроме того, сравнение целых чисел намного быстрее сравнения строк.

    Правда, это потребует перестройки всей базы данных, но только один раз, достаточно написать скрипт.
    Ответ написан
    1 комментарий
  • Стоит ли создавать отдельную базу для ключевых слов?

    zo0m
    @zo0m
    full stack developer
    индекс по сути вам эту уникальную базу и должен дать :) если место не критично, индекс и не парьтесь.
    а ну и не забываем что индекс ограничит скорость вставки

    На сколько я помню для того, чтоб это обойти (по моему это для мускля был хак) : можно его убивать, потом заливать данные, а потом заново строить индекс. (это типа для bulk update кейса)
    Ответ написан
    4 комментария
  • Не сдохнет ли HDD от ~180.000 записей в день?

    RicoX
    @RicoX
    Ушел на http://ru.stackoverflow.com/
    Рано или поздно сдохнет в любом случае, диски - это расходник, сдох и хрен с ним выкинули, купили новый. Нагрузка очень скромная, у меня на одном проекте на SSD в минуту больше записей делается и ничего живет, третий год аптайма, в другом проекте точно такой-же диск (серийник на единичку отличался из одной партии) на небольшой нагрузке сдох за 2 месяца, так что тут даже Ванга не угадает, рейд и бэкап вам поможет.
    Ответ написан
    Комментировать
  • Как APT разрешает зависимости?

    vvpoloskin
    @vvpoloskin
    Инженер связи
    При удалении с помощью apt-getа удаляется только указанный явно пакет, его зависимости не трогаются вообще. Для чистки зависимостей врея от времеи пользуйтесь apt-get autoremove. Соответственно ответы на ваши вопросы: нет, нет, да только если вы напишите apt-get remove core-utils.

    Вот здесь можете почитать некоторые советы, как посмотреть зависимости, поработать с dpkg.
    Ответ написан
    1 комментарий
  • Чем скомпилировать php-скрипты в отдельное приложение?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    В PHP 5.4+ есть встроенный вэб-сервер. Если нужна база данных - sqlite и нет проблем.

    Ну или Vagrant + виртуалка с нужным окружением и задеплоенным приложением
    Ответ написан
    Комментировать
  • Чем скомпилировать php-скрипты в отдельное приложение?

    savostin
    @savostin
    Еще один программист
    Ответ написан
    Комментировать