Задать вопрос
  • Запрос в MySQL. Есть идея?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Для поиска самих link_id
    select link_id from tablename
    group by link_id
    having count(*) = sum(flag  = 1)

    Либо
    select id from links
    where exists(select null from tablename where flag  = 1 and link_id = links.id) -- возможно это условие вам по задаче не нужно
    and not exists(select null from tablename where flag != 1 and link_id = links.id)


    Вычитывать сами строки можно попробовать через
    select ...
    from tablename t
    where t.flag = 1
    and not exists(select null from tablename sq where sq.link_id = t.link_id and sq.flag != 1)


    При том, какой из вариантов эффективнее - критично зависит от распределения данных. При большой числе различающихся link_id с малым числом строк на каждый link_id и малым ожидаемом числе подходящих строк под задачу может быть эффективнее именно
    select ... from tablename t where t.link_id in (
    select q.link_id from tablename q
    group by q.link_id
    having count(*) = sum(flag  = 1)
    )


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

    Третий запрос по ожиданию лучше отзовётся на случай малого числа flag = 1 строк в таблице.

    Самый быстрый на чтение вариант, впрочем, всё равно не выполнять обработку этого фильтра налету, а каким-то образом его материализовать и хранить предварительно рассчитанным.
    Ответ написан
    7 комментариев
  • Запрос в MySQL. Есть идея?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    например так:
    SELECT t.*
    FROM my_table t
    WHERE NOT EXISTS(
      SELECT null FROM my_table t2 WHERE t2.link_id = t.link_id and t2.flag=0
    )

    Можно и с джойном:
    WITH tt AS(SELECT DISTINCT link_id WHERE flag = 0)
    SELECT t1.*
    FROM
        my_table t1
        LEFT JOIN tt t2 ON t2.link_id = t.1link_id
    WHERE t2.link_id is None
    Ответ написан
    3 комментария
  • Как с помощью Elasticsearch получить более 1 000 000 записей?

    @Flying
    Выбирать произвольное количество результатов из Elasticsearch можно с использованием scroll API.

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

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

    vman
    @vman
    Если вы уже используете PHP, то, я бы попробовал сделать так:

    1) читаем пачку URL из списка (10,20... )
    2) через php.net/manual/ru/function.curl-multi-init.php инициалиируем и запускаем потоки
    3) ждем пока все потоки завершат работу
    4) переименовываем файлы
    5) сжимаем их
    6) повторяем п.1
    Ответ написан
    Комментировать
  • Функционал, потом верстка, или наоборот?

    @WhiteBearDev
    Бэтмэн
    Вариант 1.

    Верстальщику проще сверстать чистый html-код, чем потом разбираться в коде backend-разработчика. Не говоря о наличии сложных ветвлений, которое добавит путаницы и может привести к упущению некоторых веток
    Ответ написан
    4 комментария
  • Как правильно работать с пользователями в Docker-контейнерах?

    gecube
    @gecube
    системный администратор, программист... все дела..
    > Как работает параметр user при запуске докер-контейнеров и, самое главное - как обрабатывать его при написании своих Dockerfile'ов?

    никак. Параметр user это костыль, который позволяет софт запускать не от root'ового пользователя. Объяснять почему запускать в докере под пользователем 0 (root) что-либо - долго, но если кратко, то это очень плохо и не секурно. Соответственно, правильный путь Вы уже поняли:

    1. определять entrypoint контейнера как свой самописанный docker-entrypoint.sh скрипт
    2. в docker run оставить возможность передать ключ (точнее - переменную среды) USER
    3. в docker-entrypoint.sh его (ее, переменную среды) подхватывать и изменять через chmod/chown нужные файлы в bind-mount (каталогах, доступных и в контейнере, и на хосте) и через утилиту gosu переключаться в нужного пользователя
    4. и только как завершающий этап - запускать свой сервис в докере


    Что еще добавить. Все эти проблемы с chown/chmod возникают только если необходимо перегонять файлы между контейнером и хостом. Если этой задачи не стоит, то и все приседания и не нужны. А если все-таки нужно, то есть еще два способа это сделать без колдования с правами:
    • команда docker cp
    • использование pipe: docker exec container_name cat MY_FILE > path_on_host или аналогично
    Ответ написан
    4 комментария
  • Как правильно работать с пользователями в Docker-контейнерах?

    planc
    @planc
    user - это словесное представление для удобства, как домены в интернете
    у файла нет параметра имя юзера, имя группы юзера, там как ip адреса - номер юзера и номер группы юзера

    допустим я юзер dka на хосте uid/gid 1000

    у меня папка /tmp/docker с кодом

    я запускаю дебиан в контейнере и добавляю туда свою папку, которая будет /code
    docker run -v /tmp/docker:/code -it --rm debian bash


    создаю юзера внутри контейнера с uid 1000 gid 1000 ( как у моего юзера на хосте)
    root@364785fa76ce:/code# groupadd -g 1000 my_docker_user_group
    root@364785fa76ce:/code# useradd --uid 1000 --gid 1000 my_docker_user


    прыгаю под нового юзера с помощью su (в докер файле это директива USER)

    root@364785fa76ce:/code# su my_docker_user

    все, теперь я могу кодить на хосте, а запускать в контейнере и у меня не будет проблем с правами на файлы
    Ответ написан
    1 комментарий
  • REST FUL API на Laravel vs Микрофраемворк?

    ivanvorobei
    @ivanvorobei Автор вопроса
    iOS разработчик, канал https://t.me/sparrowcode
    Подведу итог для ищущих ответ:
    Laravel, Lumen, Slim, Silex и т.д. - фраемворки для разработки сайтов. Побочно на них можно реализовывать API.
    Если нужен голый роутинг - Slim
    Если нужны плюшки - Lumen

    Laravel для API излишен однозначно.
    Ответ написан
    Комментировать