• Как правильно организовать рабочую среду для крупного проекта с GIT?

    zorca
    @zorca
    Во-первых использовать Bitbucket, там очень все гибко и удобно для командной работы, они даже сделали сейчас связку с Trello. что просто великолепно. Команда до 5 человек - халява. Потом можно четко настроить права каждого разработчика на запись. Картинки на несколько гигов - это не программная часть, безусловно ее не нужно хранить в гите, только картинки, качающиеся элементов интерфейса. Должна быть четкая инстуркция для вновь прибывающих по порядку работы с репозиторием - каждый обычно работает в своей ветке или в ветке фичи, если ему дано определенное задание, при каждом старте работы каждый разработчик должен подтянуть к себе в ветку обновы из центровой ветки разработки. Когда он все протестит у себя, сможет отправить свои имзенения на проверку в основную ветку. Никаких прав никому кроме старшего на запись в основную ветку! Иначе это будет хаос. Периодически все по команде будут также делать миграции в своих ветках. Ну и обязательно должен быть тимилид, который будет всем этим безобразием руководить, разруливать конфликты в репозитории, разделять и властвовать.
    Ответ написан
    5 комментариев
  • Как правильно организовать рабочую среду для крупного проекта с GIT?

    - Для изображений можно использовать s3, если же всё же захотите хранить у себя, то просто кидайте их в папку, которая в gitignore. И 2гб для изображений это не много, а очень мало.
    - База должна клонироваться, а не использоваться одна и та же.
    - Миграции для того и придумали, чтобы удобно можно было модифицировать базу.
    - Должно быть 3 сайта: dev.site.ru, pre-prod.site.ru, site.ru. На первом разработка, на втором тест новых фич, ну и продакшн.
    Ответ написан
    1 комментарий
  • Почему очищается массив $_POST?

    AlexeyGfi
    @AlexeyGfi
    YouTube >>> Битриксоид из Колхоза
    Если вы обновите страницу, она не попросит вас подтвердить отправку формы (как обычно бывает при отправке POST-запроса).
    Это значит, что страница прошла через LocalRedirect( ... );

    Первое, что я бы сделал — прошёлся по лабиринту за ниточку xdebug-а.

    Возможно в _after подключении срабатывает условие переадресации, а перехватить _POST нужно до его подключения и самому сделать редирект.

    UPD: вот ещё, может поможет:
    https://dev.1c-bitrix.ru/api_help/main/general/pag...
    Ответ написан
    4 комментария
  • Как оптимизировать запрос с вложенными запросами и order by?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    SELECT `d`.*, `i`.`file_name` AS `face_foto`, `dif`.`filial_count`,
           IFNULL(`rw`.`reviews_count`, 0), IFNULL(`rw`.`doctor_rating`, 0)
      FROM (
        SELECT `df`.`doctor_id`, COUNT(*) AS `filial_count`
          FROM `clinic_filials` AS `cf`
          JOIN `doctor_in_filials` AS `df` ON `df`.`filial_id` = `cf`.`id`
          WHERE `cf`.`city_id` = 1
          GROUP BY `df`.`doctor_id`
      ) AS `dif`
      JOIN `doctors` AS `d` ON `d`.`id` = `dif`.`doctor_id`
      LEFT JOIN `images` AS `i` ON `i`.`doctor_id` = `d`.`id`
        AND `i`.`type` = "doctor_face"
      LEFT JOIN (
        SELECT `doctor_id`, COUNT(*) AS `reviews_count`, 
               AVG(`rating_doctor`) AS `doctor_rating`
          FROM `reviews`
          GROUP BY `doctor_id`
      ) AS `rw` ON `rw`.`doctor_id` = `d`.`id`

    P.S. И, естественно, EXPLAIN и создание нужных индексов.
    Ответ написан
    3 комментария
  • Как получить кол-во дочерних категорий дополнительным полем?

    select t.id, t.parent_id, t.name,
      (select count(*) from table tmp where t.id = tmp.parent_id) child_count
    from table t
    where t.parent_id is null or t.parent_id = 0
    Ответ написан
    1 комментарий
  • Какой запрос выгодней по производительности?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    Всё на самом деле зависит от того, что лично Вы подразумеваете под определением "сильно нагруженный портал" и от многих других факторов, в том числе, от используемого железа, версии MySQL (и/или его форка) и конечных параметров и настроек, и так далее. А так же, от "качества" администратора, которому вверят эту БД.

    Субъективно, оценивая Ваш вопрос, я бы порекомендовал примерно следующее:
    В "интернете", активно практикуется подход кэширования данных, не зависимо от того, какие это данные именно. Кэшируют всё, от отдельных блоков на сайте, до целых страниц вместе с cookie's, картинками и скриптами.

    В пользу кэша говорят многие факторы. Против же кэширования обычно приводятся два основных аргумента:
    а) Лишний расход оперативной памяти и/или жесткого диска
    б) Кэш не стоит применять в тех случаях, когда ресурсозатраты (машинные) на кэширование выше, чем полученный эффект экономии от получения данных из кэша (обычно это те случаи, когда количество циклов записи меньше, или незачительно больше чем количество циклов чтения данных)

    В вашем же случае, кэширование возможно в двух вариантах:
    1. MySQL (в отличии от некоторых других БД) сам кэширует результаты запросов, причем делает он это по умолчанию, но параметры кэширования можно (и чаще всего нужно) настраивать дополнительно
    2. Использование кэша с помощью специально разработанных для этих целей программ, например Redis или Memcached. PHP (и Laravel в т.ч., если мне не изменяет память) отлично дружат с ними.

    Продолжая мысль, в Вашем случае, можно использовать один двух вариантов: либо ограничиться тем, что MySQL сам закэширует результаты многих запросов и сам будет брать их из кэша (причем это касается не только запросов относительно координат, но и почти всех остальных запросов),

    либо, Вы можете использовать для хранения подобных данных (например, соотношения координат с результатами поиска) либо в таблицы в памяти (в MySQL есть тип таблиц "MEMORY"), либо хранить эти данные в Redis/Memcached/etc, глобально суть не изменится, скорость работы обоих вариантов (Таблицы в памяти vs Redis/Memcached) будет примерно сопоставимой.

    Обновлять данные в хранилище можно на основе событий, реализация которых в достаточной мере присутствуют в Laravel. То есть, вкратце выглядит это так:
    1. Обновляется (добавляется, изменяется) какой-то блок данных, связанный с фирмой, это в свою очередь порождает какое-то событие (одно из событий)
    2. Слушатель событий получает данные и делает соответствующие изменения в кэше данных, таким образом, данные в кэше всегда актуальны (либо рассинхронизация данных довольно мизерная, в пределах примерно секунды) и никакие CRON'ы, которые бестолку будут мучить базу или кэш-хранилище - не нужны.
    Ответ написан
    1 комментарий
  • Какой запрос выгодней по производительности?

    DJZT
    @DJZT
    Laravel - code for you
    Подумай на счёт кеширования. Думаю первый вариант лучше, но надо подключить кеширование. И если что-то связанное меняется (Новая станция метро) то чистить кэш.
    Ответ написан
    1 комментарий
  • Какой запрос выгодней по производительности?

    webinar
    @webinar
    Учим yii: https://youtu.be/-WRMlGHLgRg
    Идея с таблицей - бред, но направление верное. Надо использовать Ваш запрос, но кешировать его результаты. Не знаю как в laravel, но в Yii точно можно сделать кеш зависимым от запроса count() например, который будет возвращать кол-во станций. А кеш можно уже хранить в бд или в файле - это второй вопрос, мне кажется для этого filecache более подходит. Можно в принципе сделать кеш вечным и очищать при добавлении новой станции.
    Ответ написан
    3 комментария
  • C чего начать разработку модулей для Битрикса?

    thelongrunsmoke
    @thelongrunsmoke
    Программист
    Без регистрации битрикс работает 4 недели, этого мало? Подробное описание процесса разработки компонентов и модулей доступно на сайте 1С-Битрикс, полная документация там же.
    Рабочая среда? Как в обычных веб-проектах. Локальный сервер, можно OpenServer или Denwer. Любой текстовый редактор или IDE для работы с PHP (например, NetBeans). Less или sass для сборки стилей.
    Советую ознакомится с онлайн-курсами на офф.сайте, там всё есть.
    Ответ написан
    5 комментариев