Все сервисы Хабра

Сообщество IT-специалистов

Ответы на любые вопросы об IT

Профессиональное развитие в IT

Удаленная работа для IT-специалистов

Войти на сайт
  • Все вопросы
  • Все теги
  • Пользователи

Хабр Q&A — вопросы и ответы для IT-специалистов

Получайте ответы на вопросы по любой теме из области IT от специалистов в этой теме.

Узнать больше
другие проекты хабра
  • Хабр
  • Карьера
  • Фриланс
Задать вопрос
akubintsev

Александр Кубинцев

Опытный backend разработчик
  • 121
    вклад
  • 9
    вопросов
  • 277
    ответов
  • 18%
    решений
Лайки
  • Информация
  • Ответы
  • Вопросы
  • Комментарии
  • Подписки
  • Нравится
  • Достижения
  • Почему сокет клиент зависает при разрыве соединения?

    Vitsliputsli @Vitsliputsli
    Как отлавливать разрывы сети на стороне клиента в PHP и просто пропускать выполнения функции socket_read?

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

    AleksandrB
    Александр @AleksandrB
    Совсем недавно вывел "Hello world"
    Делать такие вещи нужно не через окно браузера, а через очереди. У браузера есть максимальное ожидаемое время ответа после чего соединение прервется. Да и заставлять ждать клиента пока ваш сервер загрузит глупо.
    Делается это так:
    Браузер отправляет запрос "Скачай файл по этой ссылке"
    Скрипт кладет эту задачу в очередь и отвечает браузеру "ок"
    Другой скрипт получает эту задачу и начинает скачивание, удаляет задание из очереди и пишет куда-то (в бд, например), что все ок, скачано
    Браузер (можно после обновления страницы) отображает "Файл скачан"
    Ответ написан более года назад
    6 комментариев
    6 комментариев
  • Как в php немедленно выводить данные?

    Vitsliputsli @Vitsliputsli
    То что вы хотите не нужно делать через http, либо используйте web-socket, либо полностью перетащите этот функционал на фронт. Http предназначен для получения данных, а не отправки команд-сигналов с сервера. Манипуляции с ajax или переполнением буфера - также будут извращением.
    Ответ написан более года назад
    1 комментарий
    1 комментарий
  • Как быстро сортировать в большой таблице по часто изменяемому полю?

    sarapinit
    Илья @sarapinit
    Точу водой камень
    Вспомогательная таблица с полями "баланс", "user_id". Уникальный индекс по user_id, кластерный индекс(это важно!) по полю "баланс"
    Триггер на изменение баланса в основной таблице исправляет значение во вспомогательной.

    In cases where you are accessing single rows randomly within a table, the actual order of the data in the table is unimportant. However, if you tend to access some data more than others, and there is an index that groups them together, you will benefit from using CLUSTER. If you are requesting a range of indexed values from a table, or a single indexed value that has multiple rows that match, CLUSTER will help because once the index identifies the table page for the first row that matches, all other rows that match are probably already on the same table page, and so you save disk accesses and speed up the query.


    https://www.postgresql.org/docs/9.1/sql-cluster.html

    UPD

    Я придумал другое решение.
    1) разберитесь с размером основной таблицы, скорее всего её раздуло
    https://www.youtube.com/watch?v=-GNHIHEHDmQ
    2) сделайте индекс по полю Balance с опцией Include Columns и добавьте в него user_id. Тогда при запросе

    select balance, user_id from your_table_name order by balance

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

    Melkij
    Melkij @Melkij
    PostgreSQL DBA
    explain (analyze,buffers) с включенным track_io_timing покажите.

    Варианты:
    - вы проводите весь час времени не на сортировке, а где-то ещё о чём решили не писать. Соответственно вопрос неактуален и искать надо там где обронили, а не где светло.
    - у вас несоответствующие настройки автовакуума (читай дефолтные)
    - время занимает filesort, а от ssd у вас по ошибке стоят read-optimised.
    Ответ написан более трёх лет назад
    7 комментариев
    7 комментариев
  • Как быстро сортировать в большой таблице по часто изменяемому полю?

    Дмитрий Свиридов @dimuska139
    Backend developer
    А есть вариант хранить в redis значения ID пользователей и их баланса? Например, используя Sorted sets. При каждом изменении баланса каждого пользователя обновлять значения. То есть вытащить топ из редиса, по идее, проблемы не составит. И дёргать можно сколь угодно часто, а данные всегда актуальны.
    Ответ написан более трёх лет назад
    5 комментариев
    5 комментариев
  • Как реализовать счетчик "сейчас этот товар просматривают еще N человек"?

    sarapinit
    Илья @sarapinit
    Точу водой камень
    На странице делать периодическую отправку состояния "объект просматривают". Складываете состояние в Redis HashSet со структурой:
    название хэша = id объекта
    ключ = id пользователя
    значение = timestamp
    Выбираете таймаут, например 5 секунд и считаете все записи старше 5 секунд невалидными.
    Для построения счетчика берете количество валидных элементов в хэше для конкретного объекта.
    Чтобы хэш не разрастался нужно удалять простроченные элементы т.к. Redis не умеет инвалидировать элементы хэшсета. Это можно делать периодически либо написать скрипт на lua который будет делать вставку нового элемента и одновременно удалять просроченные.
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Как реализовать счетчик "сейчас этот товар просматривают еще N человек"?

    nki
    Константин Нагибович @nki
    bezkart.ru готовая система лояльности
    Это маркетинговая уловка. Можешь делать рандомный счетчик. Лишь бы пользователь понял, что у него есть конкуренты и быстрее купил нужный товар.
    Ответ написан более трёх лет назад
    7 комментариев
    7 комментариев
  • PHP проблема при заливке файлов размеров более 2GB?

    rPman @rPman
    2гб - выглядит так будто попали в лимит 32-битной адресации (т.е. размер файла в signed int), в php целые числа при превышении 2^31 преобразуются в double, со всеми вытекающими от сюда глюками.

    попробуйте 64-битную реализацию на тестовом железе, если я прав.
    Ответ написан более трёх лет назад
    2 комментария
    2 комментария
  • Как выполнить SQL запрос страницы если было смещение?

    Melkij
    Melkij @Melkij
    PostgreSQL DBA
    И это как раз вторая причина почему для пагинации не надо использовать offset. (первая причина - производительность offset)
    Передавайте значения сортировки последнего видимого элемента списка и запрашивайте продолжен списка, а не offset.
    https://use-the-index-luke.com/sql/partial-results...
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Как обратиться к функции через $this в цикле?

    Sanasol
    Александр Аксентьев @Sanasol Куратор тега PHP
    нельзя просто так взять и загуглить ошибку
    Чтобы это работало надо при вытаскивании из базы как-нибудь превратить массив данных в объект Product.
    И собирать массив объектов.

    А у вас пока какая-то каша малаша получается.

    Вот это бессмысленно и беспощадно
    $all_products = SELECT * FROM ...
    
        foreach($all_products as $products) {
            $this->comission = 5;
            $this->base_price = 500;
        }
    
        return $this;
    Ответ написан более трёх лет назад
    4 комментария
    4 комментария
  • В чем основные отличия mySQL от Postgre?

    leahch
    Алексей Черемисин @leahch
    Я мастер на все руки, я козлик Элек Мэк :-)
    Алгоритмом работы (lock-based/ versioning), транзакциями, хранимыми процедурами, возможностями sql. Это по крупному, в мелочах - еще больше. Собственно, эти базы данных настолько разные, что сравнивать их напрямую нельзя. Каждая хороша для своего класса задач, хотя для магазина/cms обе будут примерно одинаковы.
    Ответ написан более трёх лет назад
    21 комментарий
    21 комментарий
  • Как ускорить сервер на базе NGINX - Php-Fpm?

    Boris Köln @BorisKorobkov Куратор тега PHP
    Web developer
    Выкинуть PHP, аудио-файл отдавать средствами Nginx.
    Ответ написан более трёх лет назад
    3 комментария
    3 комментария
  • Как сделать такой скрипт?

    saintbyte
    Егор Казанцев @saintbyte
    Django developer
    А просто на выводе на сайте нельзя показывать статьи у которых время размещение меньше настоящего времени?
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Какие выгоды в использовании сайтов и других веб-инструментов для бизнеса вы знаете?

    FridayEvening @FridayEvening
    По нынешним временам если у бизнеса нет сайта, то это просто вызывает подозрения :o)
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Оплата через банковские карты разным организациям — с какими API работать?

    arassahatsky
    Андрей Рассахацкий @arassahatsky
    CEO, Founder милкмедиа.рф, qurier.ru
    Помню думали над такой же идеей))) -
    Во первых деятельность попадает под лицензию (Федеральный закон от 27.06.2011 N 161-ФЗ "О национальной платежной системе") в любом случае
    Во вторых, насколько помню, придется подключать каждый банк по отдельности - у каждого свой API должен быть.

    И еще: Лицензия на эквайринг выдается крупными платежными системами, такими как Visa, Mastercard и American Express, и дает банку право осуществлять обработку и клиринг транзакций. Для приобретения лицензии на эквайринг Вам сначала понадобится пройти процедуру получения банковской лицензии, а по ее завершению приобрести программное обеспечение для Вашего платежного шлюза. Следующий шаг включает поиск дипломированной организации, которая бы могла оценить Ваше программное обеспечение и сертифицировать Вас согласно Стандартам защиты информации в сфере платежных карт (PCI DSS).
    Как только Вы получите банковскую лицензию и сертифицированный платежный шлюз, Вы сможете, наконец, обратиться к крупным эмитентам кредитных карт за получением эквайринговой лицензии. В случае приобретения лицензии на эквайринг следует обращаться к двум крупнейшим платежным системам Visa International и MasterCard International, в отличии от лицензии на выпуск карт, предполагающей взаимодействие с любым эмитентом, способным удовлетворить потребности Ваших клиентов. Инициировав процесс подачи заявления на получение эквайринговой лицензии от Visa и MasterCard, Вам будет необходимо принять решение относительно того, желаете ли Вы осуществлять процессинг карт прочих эмитентов, таких как American Express, JCB и Diners Сlub (через Visa).
    Ответ написан более трёх лет назад
    4 комментария
    4 комментария
  • Дальнейшее развитие для новичка при отсутствии вакансий в городе?

    Shull
    Сергей @Shull
    хочу быть хорошим IT-шником
    Я понимаю, что я зажратый маськвич, но...
    Переезд создаст вам КУЧУ различных проблем, даже если вы ВООБЩЕ не работаете.
    Мне уже 33 года, после травмы позвоночника я решил идти во фриланс. Но у меня есть своя комната и мама наливает мне тарелку супа, за что ей огромное спасибо. Понимаете? Эта тарелка супа решает всё! Я встаю в 5-6 утра и у меня есть еда в холодильнике! При переезде такого не будет. Не надо сжигать за собой мосты.

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

    polifill @polifill
    На работе?
    Это проблема руководства предприятия. Ставь их перед фактом, чтобы модернизировали компьютер.

    Ибо это нужно для работы.
    Ответ написан более трёх лет назад
    4 комментария
    4 комментария
  • Безопасно ли хранить данные аутентификации в открытом виде, для БД MySQL?

    CityCat4
    CityCat4 @CityCat4 Куратор тега Информационная безопасность
    Жил-был у бабушки серенький троллик...
    Это стандартная практика. Но нужно иметь в виду три момента:
    - файл с паролем должен быть вне веб-сервера
    - в файле должен указываться пользователь имеющий права только на БД сайта и только минимально необходимые права
    - MySQL должно принимать соединения только с 127.0.0.1
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Как лучше организовать отложенные http-запросы?

    safenoob
    safenoob @safenoob
    ну допустим. пользователь резервирует товар. через 30 минут нужно проверить факт подтверждения заказа в базе

    В момент резервирования товара в базу летит запись где datetime - время резервирования. На cron работает скрипт который выбирает все товары где datetime > 30 минут и проверяет по ним заказы, если заказа нет - товар удаляем из резерва.
    Ответ написан более трёх лет назад
    2 комментария
    2 комментария
Оценили как «Нравится»
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • Следующие →
Самые активные сегодня
  • Drno
    • 10 ответов
    • 0 вопросов
  • GNUBack
    • 6 ответов
    • 0 вопросов
  • vabka
    Василий Банников
    • 6 ответов
    • 0 вопросов
  • dimonchik2013
    Dimonchik
    • 5 ответов
    • 0 вопросов
  • nedosekinstanislav
    Stanislav
    • 5 ответов
    • 0 вопросов
  • i229194964
    Taulan Khatuaev
    • 3 ответа
    • 0 вопросов
  • © Habr
  • О сервисе
  • Правила
  • Обратная связь
  • Блог

Войдите на сайт

Чтобы задать вопрос и получить на него квалифицированный ответ.
Войти через центр авторизации