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

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

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

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

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

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

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

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

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

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

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

    akubintsev
    Александр Кубинцев @akubintsev
    Alex Pro, да я не сказал бы, что это что-то сложное. Поставить сервис не сложно, api без заморочек. Из альтернатив можно поднять что-нибудь самописное на go или node.js, реализовать через websocket
    Написано более года назад
  • Как быстро сортировать в большой таблице по часто изменяемому полю?

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

    akubintsev
    Александр Кубинцев @akubintsev Автор вопроса
    Melkij, мы сделали деблоат - действительно всё стало заметно лучше.
    У меня только вопрос: как вы посчитали объем прочитанных данных с диска?
    Написано более трёх лет назад
  • Как быстро сортировать в большой таблице по часто изменяемому полю?

    akubintsev
    Александр Кубинцев @akubintsev Автор вопроса
    mayton2019, CQRS подразумевает серьёзный рефакторинг. А у нас легаси-код, при чём операции по изменению баланса производятся через 2 разных сервиса.
    Написано более трёх лет назад
  • Как быстро сортировать в большой таблице по часто изменяемому полю?

    akubintsev
    Александр Кубинцев @akubintsev Автор вопроса
    Здесь такой способ не прокатит, т.к. имеем не топ-10 или топ-100, а топ-3000. При чем этих топов порядка 2000 штук сейчас на каждую игру. И в принципе я не сторонник добавлять логику в БД без крайней необходимости - это превращается в магию, которую тестировать неудобно.
    Написано более трёх лет назад
  • Как быстро сортировать в большой таблице по часто изменяемому полю?

    akubintsev
    Александр Кубинцев @akubintsev Автор вопроса
    Илья, сейчас пока разбираемся как чинить table bloat. Видео по вашей ссылке оказалось очень познавательным, кейс №1 однозначно случался. Что касается кластеризации, то всё бы ничего, но надо оценить время работы. Если эксклюзивный лок висеть будет более 2 сек, то это неприемлемо.
    Что касается Include Columns, то попробую, если лечение не даст желаемого результата, но думаю должно нормализоваться всё.
    Написано более трёх лет назад
  • Как быстро сортировать в большой таблице по часто изменяемому полю?

    akubintsev
    Александр Кубинцев @akubintsev Автор вопроса
    devalone, в принципе так и получается. Но как выяснилось мы упёрлись в проблему самой БД, где таблица распухла из-за особенностей её модели MVCC и произошла деградация производительности
    Написано более трёх лет назад
  • Как быстро сортировать в большой таблице по часто изменяемому полю?

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

    akubintsev
    Александр Кубинцев @akubintsev Автор вопроса
    Дмитрий Свиридов, да, всё верно, там достаточно только топ-3000
    Написано более трёх лет назад
  • Как быстро сортировать в большой таблице по часто изменяемому полю?

    akubintsev
    Александр Кубинцев @akubintsev Автор вопроса
    Илья, я правильно понимаю, что CLUSTER при выполнении блокирует таблицу? Тогда это может быть проблемой.

    Да, видимо сперва придётся разобраться с настройками БД.
    Написано более трёх лет назад
  • Как быстро сортировать в большой таблице по часто изменяемому полю?

    akubintsev
    Александр Кубинцев @akubintsev Автор вопроса
    Melkij,
    > track_io_timing где? Я неслучайно его упомянул.

    С этим есть сложности.

    Спасибо за анализ, похоже есть ещё над чем поработать в текущей схеме.
    Написано более трёх лет назад
  • Как быстро сортировать в большой таблице по часто изменяемому полю?

    akubintsev
    Александр Кубинцев @akubintsev Автор вопроса
    Илья, пардон, прочитал целиком описание по ссылке. Сперва немного о другом подумал. Надо попробовать.
    Написано более трёх лет назад
  • Как быстро сортировать в большой таблице по часто изменяемому полю?

    akubintsev
    Александр Кубинцев @akubintsev Автор вопроса
    Если решать в лоб, то выглядит так:
    EXPLAIN (ANALYZE, BUFFERS) SELECT user_id, rating FROM accounts WHERE game_id = 123 ORDER BY rating DESC LIMIT 3000;
                                                                                QUERY PLAN                                                                            
    ------------------------------------------------------------------------------------------------------------------------------------------------------------------
     Limit  (cost=2475021.96..2475029.46 rows=3000 width=12) (actual time=204038.913..204039.763 rows=3000 loops=1)
       Buffers: shared hit=79631 read=1385187 written=4601
       ->  Sort  (cost=2475021.96..2480821.74 rows=2319911 width=12) (actual time=204038.911..204039.447 rows=3000 loops=1)
             Sort Key: rating DESC
             Sort Method: top-N heapsort  Memory: 333kB
             Buffers: shared hit=79631 read=1385187 written=4601
             ->  Bitmap Heap Scan on accounts  (cost=549639.99..2329438.88 rows=2319911 width=12) (actual time=17485.007..202936.757 rows=2330230 loops=1)
                   Recheck Cond: (game_id = 123)
                   Rows Removed by Index Recheck: 1509171
                   Heap Blocks: exact=363810 lossy=645363
                   Buffers: shared hit=79631 read=1385187 written=4601
                   ->  Bitmap Index Scan on uk_account_user_game  (cost=0.00..549060.02 rows=2319911 width=0) (actual time=17338.478..17338.478 rows=2685830 loops=1)
                         Index Cond: (game_id = 123)
                         Buffers: shared hit=51458 read=404187 written=4601
     Planning time: 0.170 ms
     Execution time: 204044.322 ms


    Но я приделал пока костыль в виде частичного индекса по полю последнего визита в игру, чем уменьшил набор данных и немного ускорил:
    EXPLAIN (ANALYZE, BUFFERS) SELECT user_id, rating FROM accounts WHERE game_id = 123 AND last_played > '2019-01-01 00:00:00' ORDER BY rating DESC LIMIT 3000;
                                                                                 QUERY PLAN                                                                             
    --------------------------------------------------------------------------------------------------------------------------------------------------------------------
     Limit  (cost=0.43..11604.33 rows=3000 width=12) (actual time=1.270..2399.434 rows=3000 loops=1)
       Buffers: shared hit=79253 read=8879
       ->  Index Scan Backward using account_last_played_idx on accounts (cost=0.43..1797664.90 rows=464757 width=12) (actual time=1.269..2397.924 rows=3000 loops=1)
             Filter: ((last_played > '2019-01-01 00:00:00'::timestamp without time zone) AND (game_id = 123))
             Rows Removed by Filter: 11100
             Buffers: shared hit=79253 read=8879
     Planning time: 0.205 ms
     Execution time: 2400.207 ms
    (8 строк)


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

    akubintsev
    Александр Кубинцев @akubintsev Автор вопроса
    в принципе это и позволяет сделать materialized view
    Написано более трёх лет назад
  • Как быстро сортировать в большой таблице по часто изменяемому полю?

    akubintsev
    Александр Кубинцев @akubintsev Автор вопроса
    Сергей Соколов, на самом деле там не один запрос, их много. Есть несколько игр, 2 вида рейтинга и разбиения по категориям, коих пара-тройка тысяч. Это и выливается в такое длительное время. Можно уменьшить интервал обновления до раза в сутки, но это не меняет сути. Нагрузка большая и запаса производительности в этот период остаётся мало - может увеличиться время отызвчивости приложений.
    Написано более трёх лет назад
  • Как быстро сортировать в большой таблице по часто изменяемому полю?

    akubintsev
    Александр Кубинцев @akubintsev Автор вопроса
    Была такая идея.
    Есть нюанс, который это решение делает не идеальным. На самом деле есть несколько игр + несколько видов топов. То есть получится несколько "срезов" с некоторой избыточностью. Предстоит оценить хватит ли места в хранилище. Но решение выглядит вполне рабочим в первом приближении. Спасибо.
    Написано более трёх лет назад
  • Обновление php 5.4 до 7.1 (7-7.3) в Centos 7 Ngnix?

    akubintsev
    Александр Кубинцев @akubintsev
    *1 connect() to unix:/.........../php5-fpm.sock failed


    У вас этого сокета уже не должно быть, т.к. php7

    Пакет php-fpm у вас должны именоваться как php71-php-fpm
    Написано более трёх лет назад
  • Обновление php 5.4 до 7.1 (7-7.3) в Centos 7 Ngnix?

    akubintsev
    Александр Кубинцев @akubintsev
    Царёв Вадим, php71-php-* ?
    Написано более трёх лет назад
  • Как организовать сортировку бд?

    akubintsev
    Александр Кубинцев @akubintsev
    А чем не нравится конструкция запроса через OR?
    Написано более трёх лет назад
  • Почему зависает сайт при 30-40 одновременно выполняемых запросах?

    akubintsev
    Александр Кубинцев @akubintsev
    Us59, пожалуйста. Как вариант можно вообще научить демона принимать и колбеки, и слать запросы. Но на мой взгляд это менее надёжно. В конце концов можно даже посадить демона на другой сервер.
    Написано более трёх лет назад
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • Следующие →
Самые активные сегодня
  • Drno
    • 10 ответов
    • 0 вопросов
  • GNUBack
    • 6 ответов
    • 0 вопросов
  • vabka
    Василий Банников
    • 6 ответов
    • 0 вопросов
  • dimonchik2013
    Dimonchik
    • 5 ответов
    • 0 вопросов
  • nedosekinstanislav
    Stanislav
    • 5 ответов
    • 0 вопросов
  • Deita
    Deita
    • 2 ответа
    • 1 вопрос
  • © Habr
  • О сервисе
  • Правила
  • Обратная связь
  • Блог

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

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